【问题标题】:Creating a 2D array based upon a CSV基于 CSV 创建二维数组
【发布时间】:2016-12-10 14:35:24
【问题描述】:

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

【问题讨论】:

  • 你能提供一些示例输出吗?
  • 我是否正确理解相同的(源、目标)对可能会重复,或者对于给定的源和目标,最多只能有一个计数?
  • 嗨@GauravDhama 我已将其添加到问题中。
  • 嗨@holdenweb,会有多个具有相同源和目标的条目,因此需要对矩阵体内的所有计数求和。

标签: python arrays pandas numpy matrix


【解决方案1】:

使用set_indexunstack

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,

【讨论】:

  • 这太棒了@piRSqaured,正是我想要的。谢谢!
  • 如果这回答了你的问题,别忘了检查一下。
【解决方案2】:

你说你有数百万行,所以我不知道这是否有效,但如果你没有遇到内存问题,那么熊猫数据框就是要走的路:

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')

【讨论】:

  • 感谢@GauravDhama,唯一的问题是我希望所有独特的“开始”值都在表的顶部运行,所有唯一的“结束”值都在旁边运行的表。你知道这是否可能吗?
  • 已编辑程序。检查这是否适合您!
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2016-12-27
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多