Python 选择多个列,然后替换
我正在尝试在pandas中执行多列选择然后替换 df: 选择a、b、c、d中任意或全部为非零的位置Python 选择多个列,然后替换,python,pandas,Python,Pandas,我正在尝试在pandas中执行多列选择然后替换 df: 选择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: 现在我想用序列替换e列中的值: df['e'] = s.values 所以e看起来像: e: 但问题是序列的长度与数据帧中的行数不同 有什么办法吗?用于列名称为的产品,添加,最后添加,将空字符
i, j = np.where(df)
s=pd.Series(dict(zip(zip(i, j),
df.columns[j]))).reset_index(-1, drop=True)
s:
现在我想用序列替换e列中的值:
df['e'] = s.values
所以e看起来像:
e:
但问题是序列的长度与数据帧中的行数不同
有什么办法吗?用于列名称为的产品,添加,最后添加,将空字符串替换为无
:
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并将其位置用作数据框列中的布尔索引:
df['e'] = (df==1).apply(lambda x: df.columns[x], axis=1)\
.str.join(",").replace('','none')
# 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
你的代码工作得很好。我无法得到“重复”的答案。所以从这个角度来看,这不是100%的重复
b, c
d
a
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
df['e'] = (df==1).apply(lambda x: df.columns[x], axis=1)\
.str.join(",").replace('','none')
# 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