对文件中特定行求和的有效方法

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

我希望根据其他列的值对列的特定行进行求和。

例如,示例文件(以逗号分隔):

身份证 日期 时间 价值
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

关于如何最有效地做到这一点有什么建议吗?谢谢

python bash date awk
1个回答
0
投票

我将按照以下步骤进行:

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

我的一步一步:

步骤 1 和起始表

第2步

第 2 步后的表格

第3步

© www.soinside.com 2019 - 2024. All rights reserved.