简体   繁体   English

使用column及其值在pandas数据框中创建一个新列

[英]Create a new column in pandas dataframe using column and its value

I have a pandas data frame 我有一个熊猫数据框

 df = pd.DataFrame({'id':[1,2,3,4],
                    'attr1':[1,1,0,0],
                    'attr2':[0,1,1,0],
                    'attr3':[1,1,1,0],
                    'attr4':[1,1,1,1]})

在此处输入图片说明

I want to convert it to 我想将其转换为

在此处输入图片说明

Basically create a new variable which will contain previous dataframe columns if its value is 1 基本上创建一个新变量,如果其值为1,它将包含以前的数据框列

Use: 采用:

df1 = df.filter(like='attr')
df = df.drop(df1.columns, axis=1)
df['var'] = df1.dot(df1.columns + ' ').str.rstrip()
print (df)
   id                      var
0   1        attr1 attr3 attr4
1   2  attr1 attr2 attr3 attr4
2   3        attr2 attr3 attr4
3   4                    attr4

Explanation : 说明

  1. Filter columns by filter - only attribute columns filter器过滤列-仅属性列
  2. Remove columns by drop 通过删除列drop
  3. Matrix multiplication by columns with DataFrame.dot 使用DataFrame.dot按列进行矩阵乘法
  4. Last remove last whitespaces by rstrip 最后通过rstrip删除最后一个空格

Alternative solution: 替代解决方案:

cols = df.columns[df.columns.str.startswith('attr')]
df = df.drop(cols, axis=1).assign(var=df[cols].dot(cols + ' ').str.rstrip())
print (df)
   id                      var
0   1        attr1 attr3 attr4
1   2  attr1 attr2 attr3 attr4
2   3        attr2 attr3 attr4
3   4                    attr4

For revert back use str.get_dummies : 要恢复str.get_dummies使用str.get_dummies

df1 = df.join(df.pop('var').str.get_dummies(' '))
print (df1)
   id  attr1  attr2  attr3  attr4
0   1      1      0      1      1
1   2      1      1      1      1
2   3      0      1      1      1
3   4      0      0      0      1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM