首页 > 解决方案 > 为列设置值但使用索引

问题描述

我有一个这样的数据框:

a   b   c   d   e   
42  1   0   1   0
42  0   0   0   1   
42  0   1   0   0
42  1   1   0   0 

我想做一些可以使bcde列中的所有1等于a列的事情,所以基本上是这样的:

a   b   c   d   e   
42  42  0   42  0
42  0   0   0   42   
42  0   42  0   0
42  42  42  0   0 

所以它应该类似于 df.loc[df['b']==1,'b'] = df['a'] 但适用于所有 bcde。整个数据框有数百列,所以我不能使用 .loc 来设置值,而 iloc 不能像 loc 一样设置值。

标签: pythonpandas

解决方案


编辑:您可以简单地使用pandas.DataFrame.where()并将其df["a"] Series作为替换。这样,它适用于数字和字符串。

# df is your DataFrame

# New DataFrame...
new_df = df.where(df != 1, df["a"], axis="index")

# ...or in place:
df.where(df != 1, df["a"], axis=0), inplace=True)

推荐阅读