我有一个包含数百万行的CSV文件,格式如下:
start, finish,count;
101,101,10;
101,103,2;
101,104,8;
102,103,5;
因此,我们有一个起始位置,一个结束位置以及进行该旅程的人数。
我想做的就是把它放到一个桌子式的桌子上。所有起始位置沿着顶部运行的矩阵,沿着矩阵的侧面和矩阵的主体向下运行的所有末端位置具有位于该交叉点内的所有计数的总和。
到目前为止,我已经清理并导入了CSV文件,并将起始位置和结束位置存储为矢量,但是我不确定在形成矩阵体时如何处理,任何人都可以帮忙吗?
谢谢。
编辑:我希望它看起来如下:
101,102;
101,10,0;
103,2,5;
104,8,0;
答案 0 :(得分:2)
使用set_index
和unstack
df.set_index(['start', 'finish'])['count'].unstack(0)
保存到csv
print df.set_index(['start', 'finish'])['count'].unstack(0).rename_axis(None) \
.to_csv('myfilename.csv')
,101,102
101,10.0,
103,2.0,5.0
104,8.0,
答案 1 :(得分:0)
你说你有数百万行,所以我不知道这是否有效,但是如果你没有遇到内存问题,那么大熊猫数据帧是要走的路:
import pandas as pd
df = pd.read_csv('inputfile.csv')
df = df.groupby(['start','finish']).agg({'count':sum}).reset_index()
# Create Pivot table
df_out = df.pivot(index='finish',columns = 'start',values='count')
# Write Output
df_out.rename_axis(None).to_csv('output.csv')
答案 2 :(得分:0)
pivot
的另一个解决方案:
print (df.pivot(index='finish', columns='start', values='count'))
start 101 102
finish
101 10.0 NaN
103 2.0 5.0
104 8.0 NaN
如果需要删除列和索引名称,请使用rename_axis
(pandas
0.18.0
中的新内容):
print (df.pivot(index='finish', columns='start', values='count')
.rename_axis(None)
.rename_axis(None, axis=1))
101 102
101 10.0 NaN
103 2.0 5.0
104 8.0 NaN