我正在尝试选择多列,然后替换成大熊猫
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
但是问题是序列的长度与数据框中的行数不同。
关于如何做到这一点的任何想法?
答案 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"
}]
}