我希望根据其他列的值对列的特定行进行求和。
例如,示例文件(以逗号分隔):
身份证 | 日期 | 时间 | 价值 |
---|---|---|---|
11001 | 20240901 | 01:00:00 | 0.5 |
11001 | 20240901 | 02:00:00 | 0.5 |
11001 | 20240901 | 03:00:00 | 0.8 |
11001 | 20240901 | 04:00:00 | 0.5 |
11001 | 20240901 | 05:00:00 | 0.0 |
11001 | 20240901 | 06:00:00 | 0.5 |
11001 | 20240901 | 07:00:00 | 0.2 |
11001 | 20240901 | 08:00:00 | 0.5 |
11001 | 20240901 | 09:00:00 | 0.1 |
11001 | 20240901 | 10:00:00 | 0.2 |
11001 | 20240901 | 11:00:00 | 0.2 |
11001 | 20240901 | 12:00:00 | 0.7 |
11002 | 20240901 | 01:00:00 | 0.1 |
11002 | 20240901 | 02:00:00 | 0.3 |
11002 | 20240901 | 03:00:00 | 0.1 |
11002 | 20240901 | 04:00:00 | 0.6 |
11002 | 20240901 | 05:00:00 | 0.9 |
11002 | 20240901 | 06:00:00 | 0.1 |
11002 | 20240901 | 07:00:00 | 0.15 |
11002 | 20240901 | 08:00:00 | 0.3 |
11002 | 20240901 | 09:00:00 | 0.2 |
11002 | 20240901 | 10:00:00 | 0.7 |
11002 | 20240901 | 11:00:00 | 0.5 |
11002 | 20240901 | 12:00:00 | 0.3 |
因此,对于每个 ID,我想分别对 01:00:00 - 06:00:00、07:00:00 - 12:00:00、13:00:00 - 18:00:00 之间的值求和, 19:00:00 - 次日00:00:00。
上面示例的最终输出应如下所示:
身份证 | 日期 | 时间 | 价值 |
---|---|---|---|
11001 | 20240901 | 06:00:00 | 2.8 |
11001 | 20240901 | 12:00:00 | 1.9 |
11002 | 20240901 | 06:00:00 | 2.1 |
11002 | 20240901 | 12:00:00 | 2.15 |
关于如何最有效地做到这一点有什么建议吗?谢谢
我将按照以下步骤进行:
1。创建“垃圾箱”:
01:00:00 - 06:00:00 = Bin 1
07:00:00 - 12:00:00 = Bin 2
13:00:00 - 18:00:00 = Bin 3
19:00:00 - 23:59:59 = Bin 4
您可以使用 pandas cut 模块执行此操作:这里
示例代码:
import pandas as pd
#Create Bins Variable
bins = [pd.to_datetime('06:00:00').time(), pd.to_datetime('12:00:00').time(),
pd.to_datetime('18:00:00').time(), pd.to_datetime('23:59:59').time()]
#Define the labels for the bins
labels = ['Bin 1', 'Bin 2', 'Bin 3']
#Create bins
df['bins'] = pd.cut(df['col_a'].dt.time, bins=bins, labels=labels, right=False)
2。使用 Group By 功能对每个 bin 进行求和 再次,pandas 模块可以提供帮助这里,只需按 ID 和 bin 列进行分组并对感兴趣的列进行求和,然后根据您希望结果表的外观,您可能需要采取一些额外的步骤。
示例代码:
grouped_df = df.groupby(['bins', 'Id'])['col_a'].sum().reset_index()
我的一步一步: