汇总具有相同日期的单元格,并按多个列分组

时间:2019-11-01 06:37:08

标签: python pandas

我正在尝试从Thingspeak.com生成的.csv文件中提取信息。以下是我的.csv文件的快照,该文件名为“ feeds.csv”

https://i.imgur.com/WyN6oAn.png

“ field2”列仅为1的值,代表分钟。我想将所有“ field2”值添加到同一日期(已完成)。

我已经成功地能够解析日期并使用groupby函数添加与日期相关的“ field2”值。

生成的新.csv文件显示在下面的链接中。其中“桩号”是“ field1”值,“时间(分钟)”是“ field2”值的总和。

https://i.imgur.com/0SzOdtZ.png

但是我希望“ Station”列成为特定日期的Station。现在,它只是计算“ field1”下的条目数。

import pandas as pd
df = pd.read_csv("feeds.csv")

df.created_at = df.created_at.str.split(' ').str[0]  
dfout = df.groupby(['created_at']).count()
# dfout2 = df.groupby('field1') #Experimenting (ignore for now)

dfout.reset_index(level=0, inplace=True)
finaldf = dfout[['created_at', 'field1', 'field2']]
finaldf.columns = ['Date', 'Station', 'On Time (minutes)']

finaldf.to_csv('insertnewname.csv', index=False)

输出应如下所示(在下面的链接中显示):

https://i.imgur.com/fNHGaAU.png

我知道使用.count()只是添加field2值的行数(而不是总和)。

任何帮助将不胜感激。

PS。我对这个东西不熟悉,因此任何有助于解释附加代码的解释都将走很长一段路。

1 个答案:

答案 0 :(得分:1)

我相信您可以通过将列created_at添加到groupby并为汇总field2指定列sum来更改解决方案:

df = pd.read_csv("feeds.csv")

df.created_at = df.created_at.str.split().str[0]  
finaldf = df.groupby(['created_at', 'field1'], as_index=False)['field2'].sum()

finaldf.columns = ['Date', 'Station', 'On Time (minutes)']

finaldf.to_csv('insertnewname.csv', index=False)

另一种使用日期时间的解决方案-首先将parse_dates参数添加到read_csv进行转换,以便可能传递给groupby Series.dt.date

df = pd.read_csv("feeds.csv", parse_dates=['created_at'])

finaldf = df.groupby([df['created_at'].dt.date, 'field1'], as_index=False)['field2'].sum()

finaldf.columns = ['Date', 'Station', 'On Time (minutes)']

finaldf.to_csv('insertnewname.csv', index=False)