使用for循环更新熊猫数据帧中的值



我有一个空的pandas数据帧A,看起来像这样:

col1  col2
A     nan
B     nan
C     nan

我想用不同数据帧B的值填充col2,如下所示:

A    B     C
0.4  0.7  0.9

因此,得到的dfA应该看起来像:

col1  col2
A     0.4
B     0.7
C     0.9

我在A中使用了更多的列,因此转换是不可选择的。我想用for循环来点它,使用:

for i, row in A.iterrows():
A.at[i, 'col2'] = B.loc[:,B.columns.str.contains(row['col1'])

然而,这给了我多个错误,有人知道我做错了什么吗?

使用pd.Series.map

A['col2'] = A['col1'].map(B.T[0])
col1  col2
0    A   0.4
1    B   0.7
2    C   0.9

在这里,您可以使用pandas合并功能,在这里您可以根据公共列或列将列从一个数据帧转移到另一个数据框架

import pandas as pd
A = pd.DataFrame({'col1':['A','B','C']})
B = pd.DataFrame({'col1':['A','B','C'], 'col2':[0.2,0.4,0.3]})
A = pd.merge(A,B, on="col1", how="left")

或者如果你的B数据帧看起来像这个

A    B    C
0.2  0.4  0.3

#那么代码可以像这个

new_df = pd.DataFrame()
new_df['col1'] = B.columns
new_df['col2'] = B.iloc[0].values
A = pd.merge(A,new_df, on="col1", how="left")

最新更新