我有一个像这样的csv文件:
1 A 10
2 A 20
1 B 30
1 C 40
2 B 50
我想组织我的矩阵:
1 2
A 10 20
B 30 50
C 40 0
实现这一目标的最佳方法是什么?
我当前的解决方案(当我想访问矩阵中的某些内容时使用index_0和index_1):
index_0 = list(set([l.split("\t")[0] for l in csv_file]))
index_1 = list(set([l.split("\t")[1] for l in csv_file]))
m = np.zeros((len(index_0),len(index_1)))
for line in csv_file:
s = line.split("\t")
m[index_0.index(s[0]), index_1.index(s[1])] = s[2]
有些东西告诉我使用numpy / pandas有更好的方法来做到这一点..
答案 0 :(得分:3)
使用pd.pivot_table
In [913]: df.pivot_table(index='col2', columns='col1',
values='col3', aggfunc='sum', fill_value=0)
Out[913]:
col1 1 2
col2
A 10 20
B 30 50
C 40 0
或者,使用pd.crosstab
In [921]: pd.crosstab(index=df['col2'], columns=df['col1'], values=df['col3'],
...: aggfunc='sum').fillna(0)
Out[921]:
col1 1 2
col2
A 10.0 20.0
B 30.0 50.0
C 40.0 0.0
或者,使用groupby
和unstack
In [926]: df.groupby(['col2', 'col1']).sum().unstack(fill_value=0)
Out[926]:
col3
col1 1 2
col2
A 10 20
B 30 50
C 40 0
答案 1 :(得分:0)
最好的方法是使用pandas但你也可以使用import QCodeDecoder from 'qcode-decoder';
:
defaultdict