У меня есть большой CSV с тремя строками в строке в этой форме:Как перекодировать и считать эффективно
a,c,d
c,a,e
f,g,f
a,c,b
c,a,d
b,f,s
c,a,c
я прочитал в первых двух столбцах перекодировать строки в целые числа, а затем удалить дубликаты подсчета, сколько копий каждой строки были следующими:
import pandas as pd
df = pd.read_csv("test.csv", usecols=[0,1], prefix="ID_", header=None)
letters = set(df.values.flat)
df.replace(to_replace=letters, value=range(len(letters)), inplace=True)
df1 = df.groupby(['ID_0', 'ID_1']).size().rename('count').reset_index()
print df1
Это дает:
ID_0 ID_1 count
0 0 1 2
1 1 0 3
2 2 4 1
3 4 3 1
, который я именно то, что мне нужно.
Однако, поскольку мои данные большие, я хотел бы сделать два улучшения.
- Как я могу выполнить группу, а затем перекодировать, а не наоборот? Проблема в том, что я не могу выполнить df1 [['ID_0', 'ID_0']]. Replace (to_replace = буквы, значение = диапазон (len (буквы)), inplace = True). Это дает ошибку «Значение пытается установить на копии среза из DataFrame»
- Как избежать создания df1? То есть все это на месте.
Это очень приятно! Думаю, я скопирую твою идею. – eleanora