gpt4 book ai didi

python - 使用列及其值在 Pandas 数据框中创建一个新列

转载 作者:行者123 更新时间:2023-11-28 22:19:06 24 4
gpt4 key购买 nike

我有一个 Pandas 数据框

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

enter image description here

我想把它转换成

enter image description here

基本上创建一个新变量,如果它的值为 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 :

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

关于python - 使用列及其值在 Pandas 数据框中创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50015863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com