熊猫:如何使用其他数据框的列替换数据框中的值

时间:2019-05-01 20:06:08

标签: python pandas dataframe

我想使用另一个数据框作为映射映射,将数据框A中的值替换为“ 1”,如下所示:

原始数据框架A:

home

参考数据框B

Index  201901    201902    201903
a      0         0         0
b      0         0         0
c      0         0         0
d      0         0         0

结果数据框C

Index  Month
a      201902
b      201901

我已经尝试过loc,但是还没有找到一种使它起作用的方法。 有什么建议吗?

3 个答案:

答案 0 :(得分:4)

您可以使用df.iterrows()遍历第二个数据帧的行,并使用df.at[]设置所需的值。

df = pd.DataFrame([[0,0,0], [0,0,0], [0,0,0], [0,0,0]], columns=['201901', '201902', '201903'])
df.index=['a', 'b','c', 'd']
print(df)
#    201901  201902  201903
# a       0       0       0
# b       0       0       0
# c       0       0       0
# d       0       0       0

dfb = pd.DataFrame(['201902', '201901'], columns=['month'])
dfb.index = ['a', 'b']
print(dfb)
#     month
# a  201902
# b  201901

for i, row in dfb.iterrows():
    df.at[i, row] = 1

print(df)
#    201901  201902  201903
# a       0       1       0
# b       1       0       0
# c       0       0       0
# d       0       0       0

答案 1 :(得分:2)

看起来不需要迭代。我有一个使用pd.get_dummiespd.DataFrame.update

的简单解决方案
dfA.update(pd.get_dummies(dfB.Month.apply(str)))

我使用.apply(str)是因为dfB的内容注册为整数,但是A中的列是字符串,因此如果字段不匹配,update将不起作用

输出:

       201901  201902  201903
Index                        
a         0.0     1.0       0
b         1.0     0.0       0
c         0.0     0.0       0
d         0.0     0.0       0

答案 2 :(得分:2)

Numpy分配

df.values[df.index.get_indexer(dfb.index),df.columns.get_indexer(dfb.month)]=1
df
Out[1081]: 
   201901  201902  201903
a       0       1       0
b       1       0       0
c       0       0       0
d       0       0       0