【问题标题】:How to join csv and sum value in column using python如何使用python在列中加入csv和求和值
【发布时间】:2019-06-30 09:49:46
【问题描述】:

我有一个这样的 csv 文件:

file1.csv
date        item1    spec    count
2019-03-29  book     blue     10
2019-03-30  shirt    green    11
...
2019-04-25  book     blue     20
2019-04-26  shirt    green    15

和另一个像这样的文件 csv:

file2.csv
date        item1    spec    count
2019-03-29  book     blue     5
2019-03-30  shirt    green    4
...
2019-04-25  book     blue     7
2019-04-26  shirt    green    8

我想将该文件组合成这样:

fileResult.csv
date        item1    spec    count
2019-03-29  book     blue     15
2019-03-30  shirt    green    15
...
2019-04-25  book     blue     27
2019-04-26  shirt    green    23

有人可以帮我解决这个问题吗?

非常感谢

【问题讨论】:

  • set_index('date') 用于 df 和 df1.add(df2) ??
  • 您想根据日期添加还是想匹配所有列值然后添加计数?

标签: python python-3.x pandas csv


【解决方案1】:

如果您的两个数据框具有相同的 shape(相同数量的行、列)并且数据与您的示例一样对齐,我们可以简单地执行以下操作:

df1['count'] = df1['count'] + df2['count']

print(df1)
         date  item1   spec  count
0  2019-03-29   book   blue     15
1  2019-03-30  shirt  green     15
2  2019-04-25   book   blue     27
3  2019-04-26  shirt  green     23

否则使用merge

final = df1.merge(df2, on=['date', 'item1', 'spec'])
final['count'] = final.pop('count_x')+ final.pop('count_y')

         date  item1   spec  count
0  2019-03-29   book   blue     15
1  2019-03-30  shirt  green     15
2  2019-04-25   book   blue     27
3  2019-04-26  shirt  green     23

【讨论】:

  • final['count'] = final.pop('count_x'])+ final.pop('count_y') 将为您节省 drop() 行:)
  • 不错的@anky_91 必须牢记.pop,没有充分使用它。相应地编辑
【解决方案2】:

首先读取 csv 并保存在数据框中
使用 pd.concat()
连接两个文件 groupby date,item,spec 并使用 groupby() 对计数求和

df1 = pd.read_csv('csv1.csv')
df2 = pd.read_csv('csv2.csv')
df3 = pd.concat([df1,df2])
final_result= df3.groupby(['date','item','spec'],as_index=False)['count'].sum()

希望能解决你的问题

【讨论】:

  • 这是一个很好的解决方案,但还不正确,这会复制每一行。不要使用transform,只需简单的groupby 和as_index=False
  • @Erfan 你是对的 我已经更新了代码 感谢您的建议
【解决方案3】:
猜你喜欢
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2019-08-18
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多