Python:基于其他列中的唯一标识符,使用最小值创建新列

2024-05-17 00:08:27 发布

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

我有一个数据帧:

pd.DataFrame({'person':['x', 'x', 'x', 'x', 'y', 'y', 'y', 'y'], 
              'bank':['chase', 'bod', 'chase', 'boa', 'chase', 'bod', 'chase', 'boa'],
              'amount': [100, 80, 90, 60, 150, 111, 524, 51]})

enter image description here

假设“人”栏中可能有很多人。但“银行”栏中只有“大通”和“boa”。每个人都有“追逐”和“博阿”。对于每个人,我希望在“金额”列中获得每个银行的最小数字。输出如下:

enter image description here

每行应包含人员、追逐中的最小金额(“追逐分钟”)和boa中的最小金额(“追逐分钟”)

谢谢大家!


Tags: 数据dataframe人员数字银行金额amountperson
2条回答

可以使用min()作为透视表的aggfunc

pd.pivot_table(df, index='person', columns=['bank'], values='amount', aggfunc='min')

我认为目前的答案过于简单,这种解决方案的优点是可以生成一个方便的索引:

import pandas as pd

df = pd.DataFrame({'person': ['x', 'x', 'x', 'x', 'y', 'y', 'y', 'y'],
                   'bank': ['chase', 'bod', 'chase', 'boa', 'chase', 'bod', 'chase', 'boa'],
                   'amount': [100, 80, 90, 60, 150, 111, 524, 51]})

res = df.groupby(["person", "bank"]).min()

print(f"{df}\n\n{res}")

输出:

  person   bank  amount
0      x  chase     100
1      x    bod      80
2      x  chase      90
3      x    boa      60
4      y  chase     150
5      y    bod     111
6      y  chase     524
7      y    boa      51

              amount
person bank         
x      boa        60
       bod        80
       chase      90
y      boa        51
       bod       111
       chase     150

相关问题 更多 >