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
包含一个逗号分隔的值字符串,而不是一个列表……好的。我看到了问题所在。虽然有点晚了,但我已经根据您的数据更新了代码。