【问题标题】:mutate a column with column names if it contains 1如果列名包含 1,则对列进行变异
【发布时间】:2021-10-25 13:02:13
【问题描述】:

我想改变一个列 h,如果它包含 1,则它包含相应的列名 [A,B,C,D]

import pandas as pd
dfz = pd.DataFrame({'A' : [1,0,0,1,0,0],
                    'B' : [1,0,0,1,0,1],
                    'C' : [1,0,0,1,3,1],
                    'D' : [1,0,0,1,0,0]})

dfz['h'] = dfz.loc[:, 'A':'D'].replace(1,pd.Series(dfz.columns,dfz.columns))

预期输出

【问题讨论】:

  • 我重新打开问题是因为更复杂,比如在欺骗中(仅相似)

标签: python pandas


【解决方案1】:

DataFrame.dot 用于过滤列并按1 比较值,最后使用Series.replace 和空格:

#filtered columns
dfz['h'] = dfz.loc[:, 'A':'D'].eq(1).dot(dfz.loc[:, 'A':'D'].columns).replace('', '0')

#filtered by list
cols = ['A','B','C','D']
dfz['h'] = dfz[cols].eq(1).dot(pd.Index(cols)).replace('', '0')

print (dfz)
   A  B  C  D     h
0  1  1  1  1  ABCD
1  0  0  0  0     0
2  0  0  0  0     0
3  1  1  1  1  ABCD
4  0  0  3  0     0
5  0  1  1  0    BC

【讨论】:

  • dfz["h"] = (dfz.eq(1) @ dfz.columns).replace("", "0") ?
  • @DaniMesejo - 是的,在这里工作,因为 DataFrame 只有 A, B, C, D
猜你喜欢
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2012-02-17
  • 2021-12-29
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
相关资源
最近更新 更多