使用 .loc 使用另一列的值更新 pandas 列
update pandas column with another column's values using .loc
如果 ColX 的值 != 0,我需要有条件地更新下面的 ColY。与其他示例的不同之处在于,我需要将 ColY 替换为 ColX 的值,而不是字符串
当我使用以下代码时,我可以使用 .loc 替换为字符串:
df1.loc[df1.ColX != 0, 'ColY'] = 'Example'
如何用 ColX 的值替换相关的 ColY 值?我试过下面的东西都无济于事
df1.loc[df1.ColX != 0, 'ColY'] = df1.ColX
我的原始数据框 df1 是:
ID ColX ColY
A 2024 0
B 0 2023
C 2019 0
D 2023 2024
我想要的输出是:
ID ColX ColY
A 2024 2024
B 0 2023
C 2019 2019
D 2023 2023
df1.loc[df1.ColX != 0, 'ColY'] = df1.ColX
的问题是您试图用整个 df1.ColX
替换 df1.ColY
的一个子集(即 df1.ColX != 0
),它有更多值。
要有条件地复制正确的值,您还必须将相同的过滤器应用于 df1.ColX
:
df1 = pd.DataFrame(data=[[2024, 0], [0, 2023], [2019, 0], [2023, 2023],], columns=['ColX', 'ColY'])
relevant_cols = (df1.ColX != 0)
df1.loc[relevant_cols, 'ColY'] = df1.loc[relevant_cols, 'ColX']
df1
# ColX ColY
# 0 2024 2024
# 1 0 2023
# 2 2019 2019
# 3 2023 2023
为了您的方便,我认为这是另一个 cleaner 方法,使用 np.where
and .ne
:
df['ColY'] = np.where(df['ColX'].ne(0), df['ColX'], df['ColY'])
print(df)
ID ColX ColY
0 A 2024 2024
1 B 0 2023
2 C 2019 2019
3 D 2023 2023
如果 ColX 的值 != 0,我需要有条件地更新下面的 ColY。与其他示例的不同之处在于,我需要将 ColY 替换为 ColX 的值,而不是字符串
当我使用以下代码时,我可以使用 .loc 替换为字符串:
df1.loc[df1.ColX != 0, 'ColY'] = 'Example'
如何用 ColX 的值替换相关的 ColY 值?我试过下面的东西都无济于事
df1.loc[df1.ColX != 0, 'ColY'] = df1.ColX
我的原始数据框 df1 是:
ID ColX ColY
A 2024 0
B 0 2023
C 2019 0
D 2023 2024
我想要的输出是:
ID ColX ColY
A 2024 2024
B 0 2023
C 2019 2019
D 2023 2023
df1.loc[df1.ColX != 0, 'ColY'] = df1.ColX
的问题是您试图用整个 df1.ColX
替换 df1.ColY
的一个子集(即 df1.ColX != 0
),它有更多值。
要有条件地复制正确的值,您还必须将相同的过滤器应用于 df1.ColX
:
df1 = pd.DataFrame(data=[[2024, 0], [0, 2023], [2019, 0], [2023, 2023],], columns=['ColX', 'ColY'])
relevant_cols = (df1.ColX != 0)
df1.loc[relevant_cols, 'ColY'] = df1.loc[relevant_cols, 'ColX']
df1
# ColX ColY
# 0 2024 2024
# 1 0 2023
# 2 2019 2019
# 3 2023 2023
为了您的方便,我认为这是另一个 cleaner 方法,使用 np.where
and .ne
:
df['ColY'] = np.where(df['ColX'].ne(0), df['ColX'], df['ColY'])
print(df)
ID ColX ColY
0 A 2024 2024
1 B 0 2023
2 C 2019 2019
3 D 2023 2023