根据另一列的值从一列复制值

Nic*_*ach 2 python python-2.7 pandas

我正在尝试根据第四列中的值填充其他两列中的一列中的值。

我有一个包含四列的 Pandas 数据框:A、B、C、D

df_copy = df.copy()
for i, row in df.iterrows():
    if 'Test' in row.D:
        df_copy.loc[i, 'A'] = row.B
    elif 'Other' in row.D:
        df_copy.loc[i, 'A'] = row.C
Run Code Online (Sandbox Code Playgroud)

这有效,但速度很慢。有没有更有效的方法?

jor*_*ris 6

您可以为此使用“布尔索引”,而不是遍历所有行:

df_copy.loc[df['D']=='Test', 'A'] = df['B']
df_copy.loc[df['D']=='Other', 'A'] = df['C']
Run Code Online (Sandbox Code Playgroud)

如果您知道 D 列仅包含这两个值,则它甚至可以更短:

df_copy['A'] = df['B']
df_copy.loc[df['D']=='Other', 'A'] = df['C']
Run Code Online (Sandbox Code Playgroud)

如果您想使用与in运算符相同的来测试该子字符串是否在列中,您可以执行以下操作:

df['D'].str.contains('Other')
Run Code Online (Sandbox Code Playgroud)

成为布尔值而不是 df['D']=='Other'