猿问

熊猫选择多列然后替换

我正在尝试进行多列选择,然后在 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 看起来像:


电子:


b, c 

d

a

none

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


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


慕婉清6462132
浏览 145回答 2
2回答

Cats萌萌

您可以找到 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  
随时随地看视频慕课网APP

相关分类

Python
我要回答