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. 填充數據幀,丟失的數據
感謝您的接受!請記住,您也可以提出答案,所以請考慮提高其他答案。 –