str*_*tum 3 python crosstab pandas
如何从以下数据帧生成交叉表:
import pandas as pd
dat = pd.read_csv('data.txt', sep=',')
dat.head(6)
Factor1 Factor2
0 A X
1 B X
2 A X|Y
3 B X|Y
4 A X|Y|Z
5 B X|Y|Z
dat[['Factor2']] = dat[['Factor2']].applymap(lambda x : x.split('|'))
dat.head(6)
Factor1 Factor2
0 A [X]
1 B [X]
2 A [X, Y]
3 B [X, Y]
4 A [X, Y, Z]
5 B [X, Y, Z]
Run Code Online (Sandbox Code Playgroud)
结果pd.crosstab()应该是这样的:
X Y Z
A 3 2 1
B 3 2 1
Run Code Online (Sandbox Code Playgroud)
您必须首先|使用 using进行拆分Series.str.split,然后使用 进行爆炸DataFrame.explode。
df['Factor2'] = df['Factor2'].str.split('|')
t = df.explode('Factor2')
pd.crosstab(t['Factor1'], t['Factor2'])
# Factor2 X Y Z
# Factor1
# A 3 2 1
# B 3 2 1
# to remove the axis names.
# pd.crosstab(t['Factor1'], t['Factor2']).rename_axis(index=None, columns=None)
Run Code Online (Sandbox Code Playgroud)
我们可以使用get_dummies将列转换Feature2为指示变量,然后将指示变量分组Feature1并聚合sum
df['Factor2'].str.get_dummies('|').groupby(df['Factor1']).sum()
Run Code Online (Sandbox Code Playgroud)
X Y Z
Factor1
A 3 2 1
B 3 2 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |