我有以下数据框:
df = pd.DataFrame([[1, 2, "Yes"], [4, 5, "No"], [7, 8, "Yes"], [3, 5, "No"]],
... index=['a', 'b', 'c', 'd' ],
... columns=['column_1', 'column_2', 'condition'])
column_1 column_2 condition
a 1 2 Yes
b 4 5 No
c 7 8 Yes
d 3 5 No
当条件为column_1
时,我想用column_2
中的相应值替换"Yes"
中的行值。我一直在尝试使用以下代码进行此操作:
df.loc[df['condition'] == "Yes", ['column_1']] = df.ix[df['column_1']]
任何提示都非常感谢!
答案 0 :(得分:1)
ix
已过时。但是除此之外,您在这里不需要任何切片器/选择器。只需在LHS上使用loc
进行选择,熊猫便会执行索引对齐的分配。这样就足够了:
df.loc[df['condition'] == "Yes", 'column_2'] = df['column_1']
在索引对齐的分配中,仅引入df['column_1']
所需的索引。从
df.loc[df['condition'] == "Yes", 'column_2']
a 1
c 7
Name: column_2, dtype: int64
我们看到df['column_1']
仅需要索引“ a”和“ c”的值,其他所有内容都将被忽略。