熊猫在多列上选择然后替换

时间:2018-11-11 04:40:11

标签: python pandas

我正在尝试选择多列,然后替换成大熊猫

df:

a  b  c  d  e
0  1  1  0  none
0  0  0  1  none
1  0  0  0  none
0  0  0  0  none

选择a,b,c,d中的任何一个或全部都不为零的情况

i, j = np.where(df)
s=pd.Series(dict(zip(zip(i, j), 
  df.columns[j]))).reset_index(-1, drop=True)

s:

0   b
0   c
1   d
2   a

现在我想用系列替换e列中的值:

df['e'] = s.values

所以e看起来像:

e:

b, c 
d
a
none

但是问题是序列的长度与数据框中的行数不同。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

DataFrame.dot用于具有列名称的产品,添加rstrip,最后添加numpy.where以将空字符串替换为None

e = df.dot(df.columns + ', ').str.rstrip(', ')
df['e'] = np.where(e.astype(bool), e, None)
print (df)
   a  b  c  d     e
0  0  1  1  0  b, c
1  0  0  0  1     d
2  1  0  0  0     a
3  0  0  0  0  None

答案 1 :(得分:2)

您可以找到1,并将其位置用作数据框列中的布尔索引:

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect": "Allow",
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:*:123456789012:MyAppQueue"
   }]
}