gpt4 book ai didi

python - groupby 两列中的公共(public)值

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:52 26 4
gpt4 key购买 nike

我需要从两列中具有公共(public)值的行对中提取公共(public)最大值。

共同点是 A 列和 B 列中的值。第 0 行和第 1 行是共同的,第 2 行和第 3 行是共同的,第 4 行是独立的。

f = DataFrame([[1, 2, 30], [2, 1, 20], [2, 6, 15], [6, 2, 70], [7, 10, 35]], columns=['A', 'B', 'Value'])
f
A B Value
0 1 2 30
1 2 1 20
2 2 6 15
3 6 2 70
4 7 10 35

目标是提取最大值,所以最终结果是:

f_final = DataFrame([[1, 2, 30, 30], [2, 1, 20, 30], [2, 6, 15, 70], [6, 2, 70, 70], [7, 10, 35, 35]], columns=['A', 'B', 'Value', 'Max'])
f_final

A B Value Max
0 1 2 30 30
1 2 1 20 30
2 2 6 15 70
3 6 2 70 70
4 7 10 35 35

如果有办法分配一个通用的、非重复的 key ,我可以这样做:

f_key = DataFrame([[1, 1, 2, 30], [1, 2, 1, 20], [2, 2, 6, 15], [2, 6, 2, 70], [3, 7, 10, 35]], columns=['key', 'A', 'B', 'Value'])
f_key

key A B Value
0 1 1 2 30
1 1 2 1 20
2 2 2 6 15
3 2 6 2 70
4 3 7 10 35

跟进 groupby 和转换:

f_key['Max'] = f_key.groupby(['key'])['Value'].transform(lambda x: x.max())
f_key.drop('key', 1, inplace=True)
f_key

A B Value Max
0 1 2 30 30
1 2 1 20 30
2 2 6 15 70
3 6 2 70 70
4 7 10 35 35

问题一:如何分配这个公共(public) key ?

问题二:有没有更好的方法,跳过常见的关键步骤

干杯...

最佳答案

您可以对 AB 列中的值进行排序,以便对于每一行,A 中的值小于或等于B 中的值。一旦对值进行排序,您就可以像往常一样应用 groupby-transform-max:

import pandas as pd
df = pd.DataFrame([[1, 2, 30], [2, 1, 20], [2, 6, 15], [6, 2, 70], [7, 10, 35]],
columns=['A', 'B', 'Value'])
mask = df['A'] > df['B']
df.loc[mask, ['A','B']] = df.loc[mask, ['B','A']].values
df['Max'] = df.groupby(['A', 'B'])['Value'].transform('max')

print(df)

产量

   A   B  Value  Max
0 1 2 30 30
1 1 2 20 30
2 2 6 15 70
3 2 6 70 70
4 7 10 35 35

即使 AB 中的值是字符串,上述方法仍然有效。例如,

df = DataFrame([['ab', 'ac', 30], ['ac', 'ab', 20],
['cb', 'ca', 15], ['ca', 'cb', 70],
['ff', 'zz', 35]], columns=['A', 'B', 'Value'])

mask = df['A'] > df['B']
df.loc[mask, ['A','B']] = df.loc[mask, ['B','A']].values
df['Max'] = df.groupby(['A', 'B'])['Value'].transform('max')

产量

In [267]: df
Out[267]:
A B Value Max
0 ab ac 30 30
1 ab ac 20 30
2 ca cb 15 70
3 ca cb 70 70
4 ff zz 35 35

关于python - groupby 两列中的公共(public)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26066126/

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