【发布时间】:2020-04-10 21:32:23
【问题描述】:
我有两个数据框:
df1
Date ID Company Symbol Shares Value
0 2014-09-30 32511907 foo NaN 10 101
1 2014-09-30 32511957 bar No Symbol 10 101
2 2014-12-31 32511907 test No Symbol 18 152
3 2013-06-30 32511107 AA APC 43 373
4 2014-06-30 166764100 CC CVX 29 381
5 2014-09-30 166764900 C No Symbol 13 155
6 2014-09-30 166764950 C Inc No Symbol 13 155
7 2015-09-30 475643276 Test NaN 13 155
还有df2:
Company ID Symbol
0 AA Inc 32511907 AAA
1 AA Inc 32511957 No Symbol
2 BB Inc 32511107 APC
3 CC Corp 166764100 CVX
4 CC Inc 166764900 No Symbol
5 CC Inc 166764950 No Symbol
通过使用ID作为键,我需要将df1中的Symbol和Company替换为df2中的那些,这样输出看起来像:
Date ID Company Symbol Shares Value
0 2014-09-30 32511907 AA Inc AAA 10 101
1 2014-09-30 32511957 AA Inc No Symbol 10 101
2 2014-12-31 32511907 AA Inc AAA 18 152
3 2013-06-30 32511107 BB Inc APC 43 373
4 2014-06-30 166764100 CC Corp CVX 29 381
5 2014-09-30 166764900 CC Inc No Symbol 13 155
6 2014-09-30 166764950 CC Inc No Symbol 13 155
7 2015-09-30 475643276 Test NaN 13 155
我试过了:
df = df1.set_index('ID')
df.update(df2.set_index('ID'))
df = df1.loc[df1.Symbol == '', ['Company', 'Symbol']] = df.reset_index()
但是当在整个数据集上执行时,我得到了ValueError: cannot reindex from a duplicate axis,因为df.update(df2.set_index('ID')) 行使ID 成为索引,这导致了一些重复。
那么有没有其他方法可以实现所需的输出?
【问题讨论】:
-
请提供minimal reproducible example,以及完整的错误消息。无论如何,我会考虑合并,例如参见pandas.pydata.org/pandas-docs/stable/user_guide/merging.html。
-
如果在
df2中有两倍相同的ID,您想使用哪一行来更新df1? -
@MSD 我只是在谈论重复 ID 列,所以试试
df2['ID'].shape[0]和df2['ID'].drop_duplicates().shape[0]? -
是的,就是这样。我觉得自己像个白痴……非常感谢。
-
@MSD 有时在编码时你看不到愚蠢的错误,因为你离它太近了:) 玩得开心编码!
标签: python pandas dataframe join