pandas 通过与另一个数据名列匹配来填充panda Dataframe 列的空白单元格无效

yvt65v4c  于 2023-01-19  发布在  其他
关注(0)|答案(1)|浏览(111)

我有一个panda Dataframe ,我们称之为df1,它看起来像这样(下面只是一个示例,让我们对 Dataframe 给予一个概念):
| 阿克|温度|身份证|小行星2020|小行星2021|小行星2022|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 有效性|足球俱乐部|IQ_EF|一百|二百|四十五|
| 资产|足球俱乐部||五十二|四十八|十五|
| 债务|宝洁|IQ_债务|四十五|五十八|十五|
| 税收|其他||四十八|四十五|七十八|
我想使用'Id'列中的a填充空格,使用下一个辅助 Dataframe ,我们称之为df2(同样,这只是一个示例):
| 阿克|温度|身份证|
| - ------|- ------|- ------|
| 有效性|足球俱乐部|IQ_EF|
| 债务|宝洁|IQ_债务|
| 资产|足球俱乐部|IQ_AST|
| 收入|巴尔|IQ_INC|
| 税收|其他|IQ_税务|
| 投资|足球俱乐部|IQ_INV|
要获取df1 Dataframe ,如下所示:
| 阿克|温度|身份证|小行星2020|小行星2021|小行星2022|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 有效性|足球俱乐部|IQ_EF|一百|二百|四十五|
| 资产|足球俱乐部|IQ_AST|五十二|四十八|十五|
| 债务|宝洁|IQ_债务|四十五|五十八|十五|
| 税收|其他|IQ_税务|四十八|四十五|七十八|
我试着用这行代码:

ac_typ = ['Ac', 'Tp']
df1['Id'] = df1[ac_typ].merge(df2[[*ac_typ,'Id']])['Id']

但它不起作用,因为它实际上不搜索df 2 Dataframe 中Id列的空白值的Ac名称,而只是用下一个可用的值填充它,如下所示:
| 阿克|温度|身份证|小行星2020|小行星2021|小行星2022|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 有效性|足球俱乐部|IQ_EF|一百|二百|四十五|
| 资产|足球俱乐部|IQ_债务|五十二|四十八|十五|
| 债务|宝洁|钠氮|四十五|五十八|十五|
| 税收|其他|钠氮|四十八|四十五|七十八|
你们能帮帮我吗?

jtw3ybtb

jtw3ybtb1#

您的代码应该可以工作,确保在您有缺失值的情况下执行左合并:

ac_typ = ['Ac', 'Tp']
df1['Id'] = df1[ac_typ].merge(df2[[*ac_typ,'Id']], how='left')['Id']

如果要保留原始df1['Id']值,即使它们与合并结果不同:

df1.loc[df1['ID'].isna(), 'Id'] = df1[ac_typ].merge(df2[[*ac_typ,'Id']], how='left')['Id']

输出:

Ac     Tp       Id  2020  2021  2022
0  Efecty     FC    IQ_EF   100   200    45
1   Asset     FC   IQ_AST    52    48    15
2    Debt    P&G  IQ_DEBT    45    58    15
3     Tax  Other   IQ_TAX    48    45    78

相关问题