2016-01-25 5 views
0

Я новичок в Python. Я читаю csv-файл (с тремя столбцами: lib, import, import_tuples). Как подсчитать количество вхождений значения появляется во втором столбце в столбце?Подсчет числа значений в серии

Пример:

lib,imports,import_tuples 
lib1,"[0, 1, 2, 3, 4, 5]","[[5, 1, 2], [2,1,3],[2, 4, 1]]" 
lib2,"[4, 65, 99, 100]","[[4, 65, 100], [100, 4],[99, 65]]" 

Expected Output (for lib1) 
0 1 2 3 4 5 
0 3 3 1 1 1 

import pandas 
from collections import Counter 
df = pandas.read_csv('temp_data.csv') 
myList = second.values.T.tolist() 

c = df["import_tuples"].str.split(',').apply(Counter) 
data = pandas.DataFrame({n: c.apply(lambda x: x.get(n, 0)) for n in myList}) 
data = c.to_frame() 
+0

количество вхождений значения появляется» во втором столбце в столбце "- что означает это предложение? Извините, не могу это понять. –

+0

Это слишком широкое, поскольку оно хранится в виде строкового представления, поэтому сначала нужно отсортировать его, тогда вам нужно восстановить количество значений, вы можете попытаться выполнить это сначала – EdChum

+0

для каждого значения во втором столбце (0 , 1,2,3,4,5), я хочу посчитать их вхождения в столбце 3. Например, значение «0» во втором столбце появляется в третьем столбце 0 раз, тогда как значение «1» в второй столбец появляется 3 раза в третьем столбце. – kitchenprinzessin

ответ

0

Вы можете использовать pandas.Series.str.findall() для извлечения числа из strings, а затем использовать collections.Counter:

from collections import Counter 
df['imports'] = df.imports.str.findall(r'\d+') 
df['import_tuples'] = df.import_tuples.str.findall(r'\d+') 
df['imports_counted'] = df.apply(lambda x: {i: Counter(x.import_tuples).get(i) for i in x.imports}, axis=1) 

    lib    imports     import_tuples \ 
0 lib1 [0, 1, 2, 3, 4, 5] [5, 1, 2, 2, 1, 3, 2, 4, 1] 
1 lib2 [4, 65, 99, 100] [4, 65, 100, 100, 4, 99, 65] 

            imports_counted 
0 {'2': 3, '5': 1, '0': None, '3': 1, '4': 1, '1... 
1    {'99': 1, '4': 2, '100': 2, '65': 2} 
+0

Счет должен быть основан на целом числе, например, 100 появляется 2 раза в столбце «import_tuples». – kitchenprinzessin

+0

См. Обновленный ответ. – Stefan

+0

это лучше, чем мое решение, спасибо! : 'f = open ('temp_data_res.csv', 'w') для индекса, строка в df.iterrows(): источник = строка ['lib'] tuples = строка ['import_tuples'] c = tuples .split (' ') нс = [] для л в с: г = l.translate (. Ни один,'' присоединиться (chars_to_remove)) ns.append (интермедиат (г)) OD = Счетчик (ns) для ключа, значение в отсортированном (od.items()): источник печати, "", ключ, "", значение' – kitchenprinzessin