在datafram中将两个公共行的值分组为一个

2024-05-23 22:38:46 发布

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

我有一个数据帧,它有这样的值

ID Name Age Value1 Value2
1  Arya      10     
1  Arya              20
2  Sansa     67      
2  Sansa             56

我想要这样的输出

 ID Name Age Value1 Value2
 1  Arya      10     20
 2  Sansa     67     56

我知道我们可以使用groupby对他们进行分组,但是Age列是空白的,因此我无法得到期望的结果。 请建议


Tags: 数据nameidage建议空白groupbyvalue1
2条回答

如果df的每个ID始终有2个值,则可以先对行排序,然后填充Value1Value2,然后删除重复项:

df = df.sort_values(['ID', 'Value1'], ascending=[True, False])
df[['Value1', 'Value2']] = df[['Value1', 'Value2']].replace('', np.NaN)
df['Value1'] = df['Value1'].ffill()
df['Value2'] = df['Value2'].bfill()
df = df.drop_duplicates(subset=['ID'])

输出:

   ID   Name Age Value1 Value2
1   1   Arya         10     20
3   2  Sansa         67     56

我认为如果每个组和每个列只有一个值,则需要^{}替换为NaN的空值:

cols = ['Value1','Value2']

df[cols] = df[cols].replace('', np.nan)
df = df.groupby(['ID','Name','Age'])[cols].first()

相关问题 更多 >