Python 使用文本数据取消Pivot数据框

Python 使用文本数据取消Pivot数据框,python,pandas,string,dataframe,Python,Pandas,String,Dataframe,由于前面所有关于取消激活引用数值数据的数据帧的问题,我仍然没有找到如何继续下面的内容 假设我有一个如下设置的数据框: +--------+--------+--------+-------+ | Level1 | Level2 | Level3 | Props | +--------+--------+--------+-------+ | A | A | C | X,Y | +--------+--------+--------+-------+ | A

由于前面所有关于取消激活引用数值数据的数据帧的问题,我仍然没有找到如何继续下面的内容

假设我有一个如下设置的数据框:

+--------+--------+--------+-------+
| Level1 | Level2 | Level3 | Props |
+--------+--------+--------+-------+
| A      | A      | C      | X,Y   |
+--------+--------+--------+-------+
| A      | B      | C      | Y,Z   |
+--------+--------+--------+-------+
| D      | E      | F      | Y,Z   |
+--------+--------+--------+-------+
| G      | H      | I      | X,Z   |
+--------+--------+--------+-------+
我想知道:

+--------+--------+--------+---+---+---+
| Level1 | Level2 | Level3 | X | Y | Z |
+--------+--------+--------+---+---+---+
| A      | A      | C      | 1 | 1 | 0 |
+--------+--------+--------+---+---+---+
| A      | B      | C      | 0 | 1 | 1 |
+--------+--------+--------+---+---+---+
| D      | E      | F      | 0 | 1 | 1 |
+--------+--------+--------+---+---+---+
| G      | H      | I      | 1 | 0 | 1 |
+--------+--------+--------+---+---+---+
我怎么能这样做

谢谢


R.

您可以使用
pd.Series.str.get_dummies创建假人,并连接回源数据帧:

pd.concat((df.drop("Props", 1), df.Props.str.get_dummies(",")), axis=1)


 Level1 Level2  Level3  X   Y   Z
0   A      A       C    1   1   0
1   A      B       C    0   1   1
2   D      E       F    0   1   1
3   G      H       I    1   0   1
根据@BEN_YO的建议,您可以使用连接:

df.join(df.pop("Props").str.get_dummies(","))
试试这个:

import pandas as pd
  
#reading the csv
df = pd.read_csv('test.csv',delimiter='\t')

#making props column a list containing variables
df['props'] = df['props'].map(lambda x : x.split(','))

#getting dummies
df1 =pd.get_dummies(df.props.apply(pd.Series).stack()).sum(level=0)

#concatenating dummies df with original df and dropping 'props'
new_df = pd.concat([df.drop('props',1),df1],axis=1)
print(new_df)

输入

level1  level2  level3  props
A       A       C       X,Y
A       B       C       Y,Z
D       D       F       Y,Z
G       G       I       X,Z
  level1 level2 level3  X  Y  Z
0      A      A      C  1  1  0
1      A      B      C  0  1  1
2      D      D      F  0  1  1
3      G      G      I  1  0  1
输出

level1  level2  level3  props
A       A       C       X,Y
A       B       C       Y,Z
D       D       F       Y,Z
G       G       I       X,Z
  level1 level2 level3  X  Y  Z
0      A      A      C  1  1  0
1      A      B      C  0  1  1
2      D      D      F  0  1  1
3      G      G      I  1  0  1

也许pop/~df.join(df.pop('Props').str.get_dummies(“,”)是的,您的解决方案可能会更快。如果你同意的话,我再加上。因此OP意识到了各种选择。当然,happy Coding在任何情况下,它都是有效的:-)我完全没有意识到我所尝试的是一种相当于热编码的方式!非常感谢。这不起作用:
props
包含一个逗号分隔的值字符串,而不是一个列表……好的。我看到了问题所在。虽然有点晚了,但我已经根据您的数据更新了代码。