我想用另一个DataFrame中的另一列替换Pandas DataFrame上的整个列,一个例子将阐明我在寻找什么
import pandas as pd
dic = {'A': [1, 4, 1, 4], 'B': [9, 2, 5, 3], 'C': [0, 0, 5, 3]}
df = pd.DataFrame(dic)
Run Code Online (Sandbox Code Playgroud)
df是
'A' 'B' 'C'
1 9 0
4 2 0
1 5 5
4 3 3
Run Code Online (Sandbox Code Playgroud)
现在我有另一个名为df1的数据框,其中包含"E"列
df1['E'] = [ 4, 4, 4, 0]
Run Code Online (Sandbox Code Playgroud)
我想用df1的列"E"替换df的列"B"
'A' 'E' 'C'
1 4 0
4 4 0
1 4 5
4 0 3
Run Code Online (Sandbox Code Playgroud)
我试图在很多方面使用.replace()方法,但我没有得到任何好处.你能帮助我吗?
EdC*_*ica 37
如果指数匹配则:
df['B'] = df1['E']
Run Code Online (Sandbox Code Playgroud)
否则应该工作:
df['B'] = df1['E'].values
Run Code Online (Sandbox Code Playgroud)
只要元素的长度匹配,它就会起作用
Jam*_*mbe 20
如果您不介意返回一个新的数据框对象而不是更新原始Pandas,那么 .assign()将避免SettingWithCopyWarning
. 你的例子:
df = df.assign(B=df1['E'])
Run Code Online (Sandbox Code Playgroud)
Che*_*ge 8
对于那些因“SettingWithCopy”警告而苦恼的人,这里有一个可能效率不高但仍能完成工作的解决方法。
假设您覆盖 column_1 和 column_3,但保留 column_2 和 column_4
columns_to_overwrite = ["column_1", "column_3"]
Run Code Online (Sandbox Code Playgroud)
首先删除要替换的列...
original_df.drop(labels=columns_to_overwrite, axis="columns", inplace=True)
Run Code Online (Sandbox Code Playgroud)
...然后重新插入列,但使用您打算覆盖的值
original_df[columns_to_overwrite] = other_data_frame[columns_to_overwrite]
Run Code Online (Sandbox Code Playgroud)
小智 3
只需执行以下操作:
df.B = df1.E
Run Code Online (Sandbox Code Playgroud)
就这样!