基于CSV创建2D阵列

时间:2016-08-04 12:51:43

标签: python arrays pandas numpy matrix

我有一个包含数百万行的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;

3 个答案:

答案 0 :(得分:2)

使用set_indexunstack

df.set_index(['start', 'finish'])['count'].unstack(0)

enter image description here

保存到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_axispandas 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