gpt4 book ai didi

python - Pandas:如何从 groupby 值中找到单元格的索引?

转载 作者:行者123 更新时间:2023-12-05 01:25:26 26 4
gpt4 key购买 nike

我有一个数据框:

>>> import pandas as pd
>>> dates = ['1/1/2020', '1/1/2020', '1/1/2020', '1/2/2020', '1/2/2020', '1/2/2020']
>>> humidity = [11, 22, 33, 44, 55, 66]
>>> hours = [0,16,24,0,16,24]
>>> df = pd.DataFrame(list(zip(dates, hours, humidity)),
... columns =['dates', 'hours', 'humidity'])
>>> df
dates hours humidity
0 1/1/2020 0 11
1 1/1/2020 16 22
2 1/1/2020 24 33
3 1/2/2020 0 44
4 1/2/2020 16 55
5 1/2/2020 24 66

我想创建两个新列。一列将在小时 == 16 时存储索引。另一列将在湿度最大时存储索引。这两个操作都需要为每个日期单独完成。我可以使用 groupby 和转换函数找到每个日期的最大湿度,如下所示:

>>> df["max_humidity"] = ""
>>> df["max_humidity"] = df["humidity"].groupby(df["dates"]).transform("max")
>>> df
dates hours humidity max_humidity
0 1/1/2020 0 11 33
1 1/1/2020 16 22 33
2 1/1/2020 24 33 33
3 1/2/2020 0 44 66
4 1/2/2020 16 55 66
5 1/2/2020 24 66 66

但是,我不知道如何找到每个日期湿度最大时的索引位置。最终结果应该是这样的:

>>> df
dates hours humidity max_humidity sixteen_hr_idx max_humidity_idx
0 1/1/2020 0 11 33 1 2
1 1/1/2020 16 22 33 1 2
2 1/1/2020 24 33 33 1 2
3 1/2/2020 0 44 66 4 5
4 1/2/2020 16 55 66 4 5
5 1/2/2020 24 66 66 4 5

最佳答案

您可以在 transform 中传递 idxmax,这将为您提供“max_humidity_idx”。

对于“sixteen_hr_idx”,您可以找到等于 16 的行并创建一个字典,其中的键是日期,值是您可以映射到日期列的索引:

# max_humidity_idx
df["max_humidity_idx"] = df["humidity"].groupby(df["dates"]).transform("idxmax")

# sixteen_hr_idx
h = df.loc[df.hours.eq(16)]
df['sixteen_hr_idx'] = df.dates.map(dict(zip(h.dates,h.index)))

      dates  hours  humidity  max_humidity  sixteen_hr_idx  max_humidity_idx
0 1/1/2020 0 11 33 1 2
1 1/1/2020 16 22 33 1 2
2 1/1/2020 24 33 33 1 2
3 1/2/2020 0 44 66 4 5
4 1/2/2020 16 55 66 4 5
5 1/2/2020 24 66 66 4 5

我假设每个日期有一行等于 16。如果不是,map 的结果将是每个日期的last 索引(请参阅示例下):

>>> df

dates hours humidity
0 1/1/2020 0 11
1 1/1/2020 16 22
2 1/1/2020 24 33
3 1/2/2020 0 44
4 1/2/2020 16 55
5 1/2/2020 16 16

h = df.loc[df.hours.eq(16)]
>>> dict(zip(h.dates,h.index))

{'1/1/2020': 1, '1/2/2020': 5}

关于python - Pandas:如何从 groupby 值中找到单元格的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70852361/

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