簡體   English   中英

使用column及其值在pandas數據框中創建一個新列

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

我有一個熊貓數據框

 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]})

在此處輸入圖片說明

我想將其轉換為

在此處輸入圖片說明

基本上創建一個新變量,如果其值為1,它將包含以前的數據框列

采用:

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

說明

  1. filter器過濾列-僅屬性列
  2. 通過刪除列drop
  3. 使用DataFrame.dot按列進行矩陣乘法
  4. 最后通過rstrip刪除最后一個空格

替代解決方案:

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

要恢復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