我剛開始學習熊貓。我有 2 個資料框。第一個是
val num
0 1 0
1 2 1
2 3 2
3 4 3
4 5 4
第二個是
0 1 2 3
0 1 2 3 4
1 5 3 2 2
2 2 5 3 2
我想更改我的第二個資料幀,以便將資料幀中存在的值與第一個資料幀中的列 val 進行比較,并且每個相同的值都需要在資料幀的 num 列中存在的值中進行更改1.這意味著最后我需要獲得以下資料幀:
0 1 2 3
0 0 1 2 3
1 4 2 1 1
2 1 4 2 1
我如何在熊貓中做到這一點?
uj5u.com熱心網友回復:
您可以使用DataFrame.replace()來做到這一點:
df2.replace(df1.set_index('val')['num'])
解釋:
第一步是
val將第一個DataFrame的列設定為索引。這將改變第三步中匹配的執行方式。通過對索引和
num列進行子設定,將第一個 DataFrame 轉換為系列。它看起來像這樣:val 1 0 2 1 3 2 4 3 5 4 Name: num, dtype: int64接下來,使用DataFrame.replace()在第二個 DataFrame 中進行替換。它查找第二個 DataFrame 中的每個值,在 Series 中找到匹配的索引,并將其替換為 Series 中的值。
完全可重現的示例:
import pandas as pd
import io
s = """ val num
0 1 0
1 2 1
2 3 2
3 4 3
4 5 4"""
df1 = pd.read_csv(io.StringIO(s), delim_whitespace=True)
s = """ 0 1 2 3
0 1 2 3 4
1 5 3 2 2
2 2 5 3 2"""
df2 = pd.read_csv(io.StringIO(s), delim_whitespace=True)
print(df2.replace(df1.set_index('val')['num']))
uj5u.com熱心網友回復:
創建映射dict,然后replace
mpd = dict(zip(df1.val,df1.num))
df2.replace(mpd, inplace=True)
0 1 2 3
0 0 1 2 3
1 4 2 1 1
2 1 4 2 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387654.html
上一篇:動態添加列并從另一列分配計算值
