我有一个数据框,其值类似这样
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列为空白,因此我无法获得所需的结果。 请建议
答案 0 :(得分:2)
如果每个组和每一列只有一个值,我认为需要GroupBy.first
并将空值替换为NaN
s
cols = ['Value1','Value2']
df[cols] = df[cols].replace('', np.nan)
df = df.groupby(['ID','Name','Age'])[cols].first()
答案 1 :(得分:1)
如果df的每个$('.down-caret')
始终具有2个值,则可以先对行进行排序,然后分别填充ID
和Value1
,然后删除重复项:
Value2
输出:
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'])