自定义值括号上的Python Groupby

2024-10-04 09:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于python groupby的问题。我这里有个数据框:

    latlong               hour  formula_value_x
0   -37.853698 145.0562584  0   978.880733
1   -37.853698 145.0562584  1   535.458975
2   -37.853698 145.0562584  2   370.082577
3   -37.853698 145.0562584  3   348.519570
4   -37.853698 145.0562584  4   524.588282
5   -37.853698 145.0562584  5   1310.520435
6   -37.853698 145.0562584  6   3440.724656
7   -37.853698 145.0562584  7   5839.008447
8   -37.853698 145.0562584  8   6024.170196
9   -37.853698 145.0562584  9   5000.579879
10  -37.853698 145.0562584  10  4697.686943

我需要对前2列(latlonghours)运行groupby并找到最大值。但我需要在小时括号中运行groupby,比如0-5, 6-10, 11-16,17-20, 20-23。在

^{pr2}$

是不带括号的基本方法。我怎么能用这些小时来做呢?在

例如,对于一个特定的latlong值,groupby将取其所有公式值[0,1,2,3,4,5],然后取其最大值。 在找到这些小时括号的最大值后,我需要创建一个新列,该列将具有最大值(之前已找到),这些列将位于属于同一个括号的小时的旁边。在

所以..我需要这样的结果:

    latlong               hour  formula_value_x    max
0   -37.853698 145.0562584  0   978.880733        1310.520435
1   -37.853698 145.0562584  1   535.458975        1310.520435
2   -37.853698 145.0562584  2   370.082577        1310.520435
3   -37.853698 145.0562584  3   348.519570        1310.520435
4   -37.853698 145.0562584  4   524.588282        1310.520435
5   -37.853698 145.0562584  5   1310.520435       1310.520435
6   -37.853698 145.0562584  6   3440.724656       6024.170196
7   -37.853698 145.0562584  7   5839.008447       6024.170196 
8   -37.853698 145.0562584  8   6024.170196       6024.170196
9   -37.853698 145.0562584  9   5000.579879       6024.170196
10  -37.853698 145.0562584  10  4697.686943       6024.170196

Tags: 数据方法valuemax括号公式小时groupby
1条回答
网友
1楼 · 发布于 2024-10-04 09:27:57

一个简单的方法是将小时分组到一个新的列“hourgroup”中,然后使用它。在

df.loc[df.hour.isin([0, 1, 2, 3, 4, 5]), 'hourgroup'] = 'HG1'
df.loc[df.hour.isin([6, 7, 8]), 'hourgroup'] = 'HG2'
....

然后在新的数据帧中收集分组值。我将lat/long分为两个字段,因为您的示例中的空格在导入时将它们分开。在

^{pr2}$

为分组的最大值指定一个更好的名称。Max是一个错误的名称,因为函数Max存在。在

df2.rename(columns={'formula_value_x': 'max_value_x'}, inplace=True)

将其与原始数据帧合并

df_result = df.merge(df2, on=['lat', 'long', 'hourgroup'], how='left')

print(df_result)

相关问题 更多 >