python - 将一个数据框中的行替换为另一个
问题描述
我正在尝试将一个数据框中的行的值替换为另一个。
以下是示例代码
import pandas as pd
import numpy as np
from pprint import pprint
raceA = ['r1','r3','r4','r5','r6','r7','r8', 'r9']
qualifierA = ['last','first','first','first','last','last','first','first']
participantA = ['rat','rat','cat','cat','rat','dog','dog','dog']
dfA = pd.DataFrame(
{'race':raceA,
'qualifier':qualifierA,
'participant':participantA
}
)
pprint(dfA)
raceB = ['r1','r2','r3','r4','r5','r6','r7','r8', 'r9','r10']
qualifierB = ['last',np.nan,np.nan,'first','first','last','last','first','first',np.nan]
participantB = ['rat','rat',np.nan,'cat','cat','rat','dog','dog',np.nan,np.nan]
dfB = pd.DataFrame(
{'race':raceB,
'qualifier':qualifierB,
'participant':participantB
}
)
pprint(dfB)
dfB.loc[dfB.race.isin(dfA.race), ['qualifier','participant']] = dfA[['qualifier','participant']]
pprint(dfB)
例如在 dfA 中,
r9 first dog
dfB 包含,
r9 first NaN
所需输出:dfB
r9 first dog
获得的输出:
r9 NaN NaN
有人可以调查一下吗?
解决方案
与数据框一起使用DataFrame.fillna
:
df = dfB.set_index('race').fillna(dfA.set_index('race')).reset_index()
print(df)
race qualifier participant
0 r1 last rat
1 r2 NaN rat
2 r3 first rat
3 r4 first cat
4 r5 first cat
5 r6 last rat
6 r7 last dog
7 r8 first dog
8 r9 first dog
9 r10 NaN NaN
或使用update
:
dfB = dfB.set_index('race')
dfA = dfA.set_index('race')
dfB.update(dfA)
print(dfB.reset_index())
race qualifier participant
0 r1 last rat
1 r2 NaN rat
2 r3 first rat
3 r4 first cat
4 r5 first cat
5 r6 last rat
6 r7 last dog
7 r8 first dog
8 r9 first dog
9 r10 NaN NaN
推荐阅读
- python - 在 Thread 构造函数中定义 `args` 的更好方法?
- android - 对包含字符串值的 Mediastore 轨道号进行排序时出现问题
- biztalk-2016 - BizTalk - 设置电子邮件 contentType 导致错误:XML 文档中存在错误 (1, 1)
- python-3.8 - 检查字符串索引时“==”与“in”或“if in”之间有什么实际区别吗?
- python - 将多个 yaml 文件读取到 pandas Dataframe
- javascript - 如何为 HTML 中动态添加的元素添加索引?
- asp.net-core - 带有 ViewModel 无参数构造函数的 ASP.NET Core 3.1 DI
- laravel - Sanctum 和 Postman 的 SPA 身份验证问题
- flyway - 航路迁移不工作需要维修
- hyperledger-fabric - 为什么在超级账本中部署链码不起作用?