我想使用另一个数据框作为映射映射,将数据框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,但是还没有找到一种使它起作用的方法。 有什么建议吗?
答案 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_dummies
和pd.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