有没有办法在不使用循环的情况下在熊猫中执行此操作?

时间:2017-04-11 08:56:18

标签: python pandas data-science

我的开始时间:

A   B   C   D
A1  1   0   True
A2  1   0   False
A3  1   0   True

输出(不再需要D列):

A   B   C
A1  2   0
A2  1   1
A3  2   0

因此,对于df中的每一行,如果D中有True,则将B的值增加1,否则将C的值增加1。

1 个答案:

答案 0 :(得分:1)

您可以使用https://stackoverflow.com/users/5216668/will-barnwell创建新的df并添加到原始的子集:

df[['B','C']] = df[['B','C']] + pd.concat([df['D'], ~df['D']], 1, keys=['B','C'])
print (df)
    A  B  C      D
0  A1  2  0   True
1  A2  1  1  False
2  A3  2  0   True

或使用loc

df.loc[df['D'], 'B'] +=  1
df.loc[~df['D'], 'C'] +=  1
print (df)
    A  B  C      D
0  A1  2  0   True
1  A2  1  1  False
2  A3  2  0   True

或使用concatmask

df['B'] = df['B'] + df['D']
df['C'] = df['C'] + (~df['D'])

print (df)
    A  B  C      D
0  A1  2  0   True
1  A2  1  1  False
2  A3  2  0   True

上次删除列:

df = df.drop('D', axis=1)
print (df)
    A  B  C
0  A1  2  0
1  A2  1  1
2  A3  2  0