gpt4 book ai didi

python - 在具有多个系统读数的 pandas DataFrame 中,如何计算每日平均值并为每个系统选择最新平均值

转载 作者:太空宇宙 更新时间:2023-11-03 20:58:55 27 4
gpt4 key购买 nike

我已将数据集导入到 pandas DataFrame 中。每一行是特定系统 (id) 在特定时间戳 (time_stamp) 处的一个读数(振幅)。每个系统都有多个读数。

我想为每个系统选择最近的每日平均值。

这是我的数据集的示例:

df.head(6)

time_stamp amplitude
id
id1 2018-06-19 00:36:00 16163.1
id1 2018-06-19 01:19:00 16399.7
id1 2018-06-19 01:24:00 16463.3
id1 2018-06-19 03:51:00 16139.4
id2 2018-03-17 03:41:00 11886.0
id2 2018-03-17 03:41:00 12293.6

带有时间戳的列已转换为 pd.TimeStamp:

df.dtypes

time_stamp datetime64[ns]
amplitude float64
dtype: object

我首先计算每个系统的每日平均值。

为此,我用日期替换了时间戳,按系统 ID(索引)对行进行分组,并计算每个日期的平均值。这将创建一个具有 MultiIndex ['id', 'date']

的 DataFrame
av = df.copy()

# work with dates rather than time stamps
av['date'] = av.time_stamp.dt.date
av.drop('time_stamp', axis=1, inplace=True)

# calculate daily means for each system
av = av.groupby([av.index,'date']).mean()
av
amplitude
id date
id1 2018-03-17 13923.500
2018-04-17 14130.325
2018-12-22 13532.650
id2 2018-03-17 12234.720
2018-04-17 12367.050
id3 2018-06-19 16291.375

此时我陷入困境。

有人可以建议我如何使用每个系统的最新平均值创建一个新的 DataFrame 吗?像这样的事情:

            date     amplitude
id
id1 2018-12-22 13532.650
id2 2018-04-17 12367.050
id3 2018-06-19 16291.375

谢谢

最佳答案

使用Index.get_level_valuesIndex.duplicated ,通过 ~ 反转掩码并通过 boolean indexing 过滤:

print (df)
time_stamp amplitude
id
id1 2018-06-19 00:36:00 16163.1
id1 2018-06-18 01:19:00 16399.7
id1 2018-06-18 01:24:00 16463.3
id1 2018-06-20 03:51:00 16139.4
id2 2018-03-17 03:41:00 11886.0
id2 2018-03-17 03:41:00 12293.6

#simplfying solution
av = df.groupby([df.index, df['time_stamp'].dt.date.rename('date')]).mean()
#alternative
#av = df.groupby([df.index, df['time_stamp'].dt.floor('d').rename('date')]).mean()
av = av[~av.index.get_level_values('id').duplicated(keep='last')]
print (av)
amplitude
id date
id1 2018-06-20 16139.4
id2 2018-03-17 12089.8

如果将 MultiIndex 转换为列,请使用 DataFrame.drop_duplicates :

av = df.groupby([df.index, df['time_stamp'].dt.date.rename('date')]).mean().reset_index()

av = av.drop_duplicates('id', keep='last')
print (av)
id date amplitude
2 id1 2018-06-20 16139.4
3 id2 2018-03-17 12089.8

关于python - 在具有多个系统读数的 pandas DataFrame 中,如何计算每日平均值并为每个系统选择最新平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55827499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com