gpt4 book ai didi

python - 获取 groupby 中的相应值

转载 作者:行者123 更新时间:2023-12-04 08:58:35 35 4
gpt4 key购买 nike

我有一个与此类似的数据集

Serial    A        B       
1 12
1 31
1
1 12
1 31 203
1 10
1 2
2 32 100
2 32 242
2 3
3 2
3 23 100
3
3 23
我根据 Serial 对数据帧进行分组,并找到每个 A 的最大值专栏作者 df['A_MAX'] = df.groupby('Serial')['A'].transform('max').values并通过 df['A_MAX'] = df['A_MAX'].mask(df['Serial'].duplicated(), '') 保留第一个值
Serial    A        B       A_MAX    B_corresponding
1 12 31 203
1 31
1
1 12
1 31 203
1 10
1 2
2 32 100 32 100
2 32 242
2 3
3 2 23 100
3 23 100
3
3 23
现在为 B_corresponding列,我想得到对应的 B A_MAX 的值.我想到了定位 A_MAX A 中的值但也有类似的 max A每组值。附加条件,例如在 Serial 2 中我也希望得到最小的 B 32 之间的值

最佳答案

想法是使用 DataFrame.sort_values 对于每组的最大值,然后通过 DataFrame.dropna 删除缺失值并通过 Serial 获得第一行来自 DataFrame.drop_duplicates .创建 Series来自 DataFrame.set_index 和上次使用 Series.map :

df['A_MAX'] = df.groupby('Serial')['A'].transform('max')
df['A_MAX'] = df['A_MAX'].mask(df['Serial'].duplicated())

s = (df.sort_values(['Serial','A'], ascending=[True, False])
.dropna(subset=['B'])
.drop_duplicates('Serial')
.set_index('Serial')['B'])
df['B_corresponding'] = df['Serial'].map(s).mask(df['Serial'].duplicated())
print (df)
Serial A B A_MAX B_corresponding
0 1 12.0 NaN 31.0 203.0
1 1 31.0 NaN NaN NaN
2 1 NaN NaN NaN NaN
3 1 12.0 NaN NaN NaN
4 1 31.0 203.0 NaN NaN
5 1 10.0 NaN NaN NaN
6 1 2.0 NaN NaN NaN
7 2 32.0 100.0 32.0 100.0
8 2 32.0 242.0 NaN NaN
9 2 3.0 NaN NaN NaN
10 3 2.0 NaN 23.0 100.0
11 3 23.0 100.0 NaN NaN
12 3 NaN NaN NaN NaN
13 3 23.0 NaN NaN NaN
将缺失值转换为空字符串是可能的,但会得到混合值 - 数字和字符串,所以接下来的处理应该是有问题的:
df['A_MAX'] = df.groupby('Serial')['A'].transform('max')
df['A_MAX'] = df['A_MAX'].mask(df['Serial'].duplicated(), '')

s = (df.sort_values(['Serial','A'], ascending=[True, False])
.dropna(subset=['B'])
.drop_duplicates('Serial')
.set_index('Serial')['B'])

df['B_corresponding'] = df['Serial'].map(s).mask(df['Serial'].duplicated(), '')
print (df)
Serial A B A_MAX B_corresponding
0 1 12.0 NaN 31 203
1 1 31.0 NaN
2 1 NaN NaN
3 1 12.0 NaN
4 1 31.0 203.0
5 1 10.0 NaN
6 1 2.0 NaN
7 2 32.0 100.0 32 100
8 2 32.0 242.0
9 2 3.0 NaN
10 3 2.0 NaN 23 100
11 3 23.0 100.0
12 3 NaN NaN
13 3 23.0 NaN

关于python - 获取 groupby 中的相应值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63681773/

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