Python 在数据帧中将两个公用行的值分组为一个
我有一个数据帧,它有这样的值Python 在数据帧中将两个公用行的值分组为一个,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,它有这样的值 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 我想要这样的输出 ID Name Age Value1 Value2 1 Ary
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
我想要这样的输出
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对它们进行分组,但“年龄”列为空,因此我无法获得所需的结果。
请建议如果每组和每列只有一个值,我认为需要将空值替换为NaN
s:
cols = ['Value1','Value2']
df[cols] = df[cols].replace('', np.nan)
df = df.groupby(['ID','Name','Age'])[cols].first()
如果您的df对于每个
ID
始终有2个值,您可以先对行进行排序,然后填充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'])
输出:
ID Name Age Value1 Value2
1 1 Arya 10 20
3 2 Sansa 67 56
每个组是否可能有多个值,如
2 Sansa 67
更改为1 Arya 67
?请小心,组之间的一些值可能被错误地替换为FFILTRUE,但如果每个ID始终有2个值,则排序应该有效是,如果数据的模式与示例中的模式完全相同,则它会起作用。@jezrael是的,您是对的……模式更改会在数据中产生问题。@jezrael但您的解决方案不考虑产生问题的空列。