Объединить (объединить) 4 разных файла CSV с разными идентификаторами и несколькими значениями с помощью DataFrames

Поскольку getOwnPropertyNames может получить вам неперечислимые свойства, вы можете использовать это и объединить его с хождением по цепочке прототипов.

function getAllProperties(obj){
    var allProps = []
      , curr = obj
    do{
        var props = Object.getOwnPropertyNames(curr)
        props.forEach(function(prop){
            if (allProps.indexOf(prop) === -1)
                allProps.push(prop)
        })
    }while(curr = Object.getPrototypeOf(curr))
    return allProps
}

Я тестировал это на Safari 5.1 и получил

> getAllProperties([1,2,3])
["0", "1", "2", "length", "constructor", "push", "slice", "indexOf", "sort", "splice", "concat", "pop", "unshift", "shift", "join", "toString", "forEach", "reduceRight", "toLocaleString", "some", "map", "lastIndexOf", "reduce", "filter", "reverse", "every", "hasOwnProperty", "isPrototypeOf", "valueOf", "__defineGetter__", "__defineSetter__", "__lookupGetter__", "propertyIsEnumerable", "__lookupSetter__"]

Обновление: отредактировал код немного (добавленные пробелы и фигурные скобки и улучшил имя функции):

function getAllPropertyNames( obj ) {
    var props = [];

    do {
        Object.getOwnPropertyNames( obj ).forEach(function ( prop ) {
            if ( props.indexOf( prop ) === -1 ) {
                props.push( prop );
            }
        });
    } while ( obj = Object.getPrototypeOf( obj ) );

    return props;
}

И просто получить все .. ( enum / nonenum, self / inherited .. Пожалуйста, подтвердите ..

function getAllPropertyNames( obj ) {
    var props = [];

    do {
        props= props.concat(Object.getOwnPropertyNames( obj ));
    } while ( obj = Object.getPrototypeOf( obj ) );

    return props;
}
2
задан John Doe 18 March 2019 в 11:54
поделиться

2 ответа

Вы можете использовать что-то вроде приведенного ниже кода для сопоставления / замены значений. Добавьте оператор if для обнаружения ячеек с несколькими значениями и разделите значения точкой с запятой:

for i in df_main['ID_1']:
    df_main.loc[df_main['ID_1']==i , 'ID_1'] = df_1.loc[df_1['ID_1']==i , 'Monthly_MB']
0
ответ дан archer 18 March 2019 в 11:54
поделиться

Я предлагаю сначала создать словарь со всеми поисковыми файлами, используя DataFrame.set_index и Series.to_dict :

d = {'ID_1' : df2.set_index('ID_1')['Monthly_MB'].to_dict(),
     'ID_2' : df3.set_index('ID_2')['platform'].to_dict(),
     'ID_3' : df4.set_index('ID_3')['Device'].to_dict()}

, затем цикл по всем ключам словарей использовать понимание списка - сначала разбить значения на ;, если строки, отобразить по словарю и join обратно на ;:

for c in d.keys():
    f = lambda x: ';'.join(str(d[c].get(y, '')) for y in x.split(';')) 
                                                if isinstance(x, str) 
                                                else x
    df1[c] = df1[c].apply(f)

print (df1)
             Name              Address  ID_1         ID_2    ID_3
0  Ruth D. Batie   4962 Hill Street     1557  NaN          BOOST2
1  Kelley C. Rice  1074 Tipple Road     NaN   android      NaN   
2  Gary P. Kirby   1520 Robinson Court  24    android;ios  BOOST2
0
ответ дан jezrael 18 March 2019 в 11:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: