![](/img/trans.png)
[英]Pandas - Replace values in a DataFrame Based on a Boollean DataFrame
[英]Replace values in pandas dataframe based on other dataframe
我有兩個數據框,其中一個的形式為:
# X Y
1 2 0.0
2 5 0.0
3 10 0.0
4 15 0.0
5 17 0.0
6 21 0.0
一種形式為:
A B C
1 4 2
2 5 3
3 6 4
我想用X值替換第二個數據幀中的所有ABC值; 所以我想遍歷ABC df,如果該數字與df1的#匹配,則將其替換為X值
茶幾應該看起來像:
A B C
2 15 5
5 17 10
10 21 15
有辦法嗎?
IIUC replace
df1.replace(df.set_index('#').X)
Out[382]:
A B C
0 2 15 5
1 5 17 10
2 10 21 15
假設您的第一個DataFrame是a
,第二個是b
,您可以將b
列映射到ax
值,如下所示:
b.apply(lambda y: a.x[(y -1).tolist()].values)
結果是:
A B C
0 2 15 5
1 5 17 10
2 10 21 15
只有您應該使用:
df1.set_index('#',inplace = True)
df=df.apply(lambda x: x.replace(df1.loc[x,'X']))
例:
import pandas as pd
import numpy as np
df1=pd.DataFrame()
df1['#']=[1,2,3,4,5,6]
df1['X']=[2,5,10,15,17,21]
df1['Y']=[0,0,0,0,0,0]
df=pd.DataFrame()
df['A']=[1,2,3]
df['B']=[4,5,6]
df['C']=[2,3,4]
df1.set_index('#',inplace = True)
df=df.apply(lambda x: x.replace(df1.loc[x,'X']))
print(df)
輸出:
A B C
0 2 15 5
1 5 17 10
2 10 21 15
注意 df1.set_index('#',inplace = True)
將'#'
列設置為index。 如果此列已經是索引,則無需執行它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.