Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧中将两个公用行的值分组为一个_Python_Pandas_Dataframe - Fatal编程技术网

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但您的解决方案不考虑产生问题的空列。