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

问题描述 投票:0回答:1

我正在尝试从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。我对这个东西不了解,因此任何有助于解释附加代码的解释都将有很长的路要走。

python pandas
1个回答
0
投票

我相信您可以将解决方案更改为:

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)

与日期时间一起使用的另一种解决方案:

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)
© www.soinside.com 2019 - 2024. All rights reserved.