1
A
回答
3
选项1
短版
df1.score = df1.score.mask(df1.score.eq(0)).fillna(
df1.name.map(df2.set_index('name').score)
)
df1
name score
0 A 10.0
1 B 32.0
2 A 10.0
3 C 30.0
4 B 20.0
5 A 45.0
6 A 10.0
7 A 10.0
选项2
使用searchsorted
有趣的版本。 df2
必须按'name'
排序。
i = np.where(np.isnan(df1.score.mask(df1.score.values == 0).values))[0]
j = df2.name.values.searchsorted(df1.name.values[i])
df1.score.values[i] = df2.score.values[j]
df1
name score
0 A 10.0
1 B 32.0
2 A 10.0
3 C 30.0
4 B 20.0
5 A 45.0
6 A 10.0
7 A 10.0
+0
第一次注意'fillna'可以这样,谢谢:))+ 1 – Wen
2
如果df1
和df2
是你dataframes,您可以创建一个映射,然后调用pd.Series.replace
:
df1 = pd.DataFrame({'name' : ['A', 'B', 'A', 'C', 'B', 'A', 'A', 'A'],
'score': [0, 32, 0, np.nan, np.nan, 45, np.nan, np.nan]})
df2 = pd.DataFrame({'name' : ['A', 'B', 'C'], 'score' : [10, 20, 30]})
print(df1)
name score
0 A 0.0
1 B 32.0
2 A 0.0
3 C NaN
4 B NaN
5 A 45.0
6 A NaN
7 A NaN
print(df2)
name score
0 A 10
1 B 20
2 C 30
mapping = dict(df2.values)
df1.loc[(df1.score.isnull()) | (df1.score == 0), 'score'] =\
df1[(df1.score.isnull()) | (df1.score == 0)].name.replace(mapping)
print(df1)
name score
0 A 10.0
1 B 32.0
2 A 10.0
3 C 30.0
4 B 20.0
5 A 45.0
6 A 10.0
7 A 10.0
+2
老兄! 'dict(df2.values)'很漂亮。我会偷...借来的。 – piRSquared
+0
@piRSquared无论如何! –
1
或者使用merge
,fillna
import pandas as pd
import numpy as np
df1.loc[df.score==0,'score']=np.nan
df1.merge(df2,on='name',how='left').fillna(method='bfill',axis=1)[['name','score_x']]\
.rename(columns={'score_x':'score'})
1
此方法更改顺序(结果将按name
排序)。
df1.set_index('name').replace(0, np.nan).combine_first(df2.set_index('name')).reset_index()
name score
0 A 10
1 A 10
2 A 45
3 A 10
4 A 10
5 B 32
6 B 20
7 C 30
相关问题
- 1. 根据上一个值填充数据帧列中的NaN
- 2. 根据另一个数据帧设置数据帧中的值
- 3. Excel根据另一列中选择的数据填充数据
- 4. 熊猫从另一个数据帧中填充数据帧中的缺失值
- 5. 熊猫根据另一个数据框中的匹配列填充新的数据帧列
- 6. 从另一列填充数据帧列
- 7. 根据另一个数据帧中的日期过滤数据帧中的值
- 8. R - 使用来自另一个数据帧的值,根据行匹配填充一个数据帧
- 9. R - 根据另一个数据帧中的列从数据帧中删除行
- 10. 根据在另一个数据框中找到的范围填充数据框中的列
- 11. 根据同一行中的另一列值填充列的值
- 12. 根据另一个数据帧中的列创建新的数据帧行
- 13. 根据来自另一个数据帧的值将列添加到数据帧
- 14. 根据2列中的值范围有条件地填充数据帧列
- 15. 根据来自另一个数据帧的值计算一个数据帧中观察值的数量
- 16. 根据另一列中的行自动填充第二列中的数据
- 17. 根据另一个数据框中的另一列修改一个数据框中的列(Pandas)
- 18. Python熊猫:用另一个数据填充数据帧
- 19. 根据另一个数据帧的条件减去数据帧的值
- 20. 如何根据组合框中的值填充数据网格
- 21. 如果根据数据帧中的另一列声明:R中
- 22. 如何通过匹配来自另一个数据框的值填充数据框中的列值pandas
- 23. 如何在pandas中用空列表[]填充数据帧Nan值?
- 24. 根据另一列的值在新数据帧列中应用函数
- 25. 用另一个数据框(组合)的值填充熊猫数据框
- 26. 根据另一个数据框的行的一个数据框的子集列
- 27. 使用另一个数据框替换数据帧列中的值
- 28. 使用熊猫填充从另一个数据帧中丢失1个数据帧的值
- 29. 根据每个数据帧的列值更改多个数据帧的列
- 30. 填充数据帧,丢失的数据
感谢您的接受!请记住,您也可以提出答案,所以请考虑提高其他答案。 –