Python 用另一个带有groupby的数据帧填充数据帧NaN
我相信这个问题以前已经得到了回答,但我似乎找不到正确的解决办法。我试过pd.merge,merge,combine_first和update,但他们似乎都没有找到合适的工作。它们要么创建一个带有x的新变量,要么在下面暗示堆栈。我希望将Python 用另一个带有groupby的数据帧填充数据帧NaN,python,pandas,merge,Python,Pandas,Merge,我相信这个问题以前已经得到了回答,但我似乎找不到正确的解决办法。我试过pd.merge,merge,combine_first和update,但他们似乎都没有找到合适的工作。它们要么创建一个带有x的新变量,要么在下面暗示堆栈。我希望将df1合并到df中,其中c列缺少值。我希望在每个日期对每个id执行此操作 任务的示例df df date id a b c d 1/1/2000 1 10 20 10 11 1/1/2000 2 1
df1
合并到df
中,其中c
列缺少值。我希望在每个日期对每个id
执行此操作
任务的示例df
df
date id a b c d
1/1/2000 1 10 20 10 11
1/1/2000 2 11 21 NaN 11
1/1/2000 3 15 20 NaN 11
1/1/2000 4 12 24 13 11
1/2/2000 1 10 25 10 11
1/2/2000 2 10 20 NaN 15
1/2/2000 3 10 26 NaN 11
1/2/2000 4 10 20 16 13
1/3/2000 1 10 20 10 11
1/3/2000 2 10 20 NaN 11
1/3/2000 3 10 20 NaN 11
1/3/2000 4 10 20 10 11
date id a b c d
1/1/2000 1 10 20 10 11
1/1/2000 2 11 21 1 11
1/1/2000 3 15 20 14 11
1/1/2000 4 12 24 13 11
1/2/2000 1 10 25 10 11
1/2/2000 2 10 20 13 15
1/2/2000 3 10 26 22 11
1/2/2000 4 10 20 16 13
1/3/2000 1 10 20 10 11
1/3/2000 2 10 20 13 11
1/3/2000 3 10 20 18 11
1/3/2000 4 10 20 10 11
df1
date id c
12/29/1999 2 1
12/30/1999 3 1
12/30/1999 2 1
12/31/1999 3 1
12/31/1999 2 1
12/31/1999 4 1
1/1/2000 2 1
1/1/2000 3 14
1/2/2000 2 13
1/2/2000 3 22
1/3/2000 2 13
1/3/2000 3 18
组合df
和d1
后所需的df
df
date id a b c d
1/1/2000 1 10 20 10 11
1/1/2000 2 11 21 NaN 11
1/1/2000 3 15 20 NaN 11
1/1/2000 4 12 24 13 11
1/2/2000 1 10 25 10 11
1/2/2000 2 10 20 NaN 15
1/2/2000 3 10 26 NaN 11
1/2/2000 4 10 20 16 13
1/3/2000 1 10 20 10 11
1/3/2000 2 10 20 NaN 11
1/3/2000 3 10 20 NaN 11
1/3/2000 4 10 20 10 11
date id a b c d
1/1/2000 1 10 20 10 11
1/1/2000 2 11 21 1 11
1/1/2000 3 15 20 14 11
1/1/2000 4 12 24 13 11
1/2/2000 1 10 25 10 11
1/2/2000 2 10 20 13 15
1/2/2000 3 10 26 22 11
1/2/2000 4 10 20 16 13
1/3/2000 1 10 20 10 11
1/3/2000 2 10 20 13 11
1/3/2000 3 10 20 18 11
1/3/2000 4 10 20 10 11
让我们在带有id
和date
列的数据框中创建一个MultiIndex
,然后使用Series.fillna
从df2
中的相应值填充df1
列c
中的NaN
值:
df1['c'] = df1.set_index(['date', 'id'])['c']\
.fillna(df2.set_index(['id', 'date'])['c']).tolist()
让我们在带有id
和date
列的数据框中创建一个MultiIndex
,然后使用Series.fillna
从df2
中的相应值填充df1
列c
中的NaN
值:
df1['c'] = df1.set_index(['date', 'id'])['c']\
.fillna(df2.set_index(['id', 'date'])['c']).tolist()
至少在你的例子中,你可以。AKA,df1
,始终与缺失值的数量相同:
df = df.reset_index(drop=True)
df1 = df.reset_index(drop=True)
df.loc[df['c'].isna(), 'c'] = list(df1['c'])
结果:
date id a b c d
0 1/1/2000 1 10 20 10.0 11
1 1/1/2000 2 11 21 1.0 11
2 1/1/2000 3 15 20 14.0 11
3 1/1/2000 4 12 24 13.0 11
4 1/2/2000 1 10 25 10.0 11
5 1/2/2000 2 10 20 13.0 15
6 1/2/2000 3 10 26 22.0 11
7 1/2/2000 4 10 20 16.0 13
8 1/3/2000 1 10 20 10.0 11
9 1/3/2000 2 10 20 13.0 11
10 1/3/2000 3 10 20 18.0 11
11 1/3/2000 4 10 20 10.0 11
至少在你的例子中,你可以。AKA,df1
,始终与缺失值的数量相同:
df = df.reset_index(drop=True)
df1 = df.reset_index(drop=True)
df.loc[df['c'].isna(), 'c'] = list(df1['c'])
结果:
date id a b c d
0 1/1/2000 1 10 20 10.0 11
1 1/1/2000 2 11 21 1.0 11
2 1/1/2000 3 15 20 14.0 11
3 1/1/2000 4 12 24 13.0 11
4 1/2/2000 1 10 25 10.0 11
5 1/2/2000 2 10 20 13.0 15
6 1/2/2000 3 10 26 22.0 11
7 1/2/2000 4 10 20 16.0 13
8 1/3/2000 1 10 20 10.0 11
9 1/3/2000 2 10 20 13.0 11
10 1/3/2000 3 10 20 18.0 11
11 1/3/2000 4 10 20 10.0 11
这也是约会。编辑了问题,它也是日期。编辑了问题谢谢你的参与。我已经更新了这个问题,因为df1
和df
的长度不同。当我按照上述步骤操作时,df
中的列仍然保留empty@oceanbeach96我认为这应该很好。请确保代码中的df1
替换为df
,而df2
替换为df1
。谢谢您的帮助。我已经更新了这个问题,因为df1
和df
的长度不同。当我按照上述步骤操作时,df
中的列仍然保留empty@oceanbeach96我认为这应该很好。请确保代码中的df1
替换为df
,而df2
替换为df1
。谢谢您的帮助。我已经更新了这个问题,因为df1
和df
的长度不同。当我按照上面的步骤操作时,df
中的列仍然为空,您可以继续。我已经更新了这个问题,因为df1
和df
的长度不同。当我按照上面的步骤操作时,df
中的列仍然为空