Kai*_*sar 5 python dataframe pandas
我正在尝试使用以编程方式创建的 lambda 函数对数据帧进行分组聚合。这样我就可以模拟列中存在的类别的单热编码器。
数据框:
df = pd.DataFrame(np.array([[10, 'A'], [10, 'B'], [20, 'A'],[30,'B']]),
columns=['ID', 'category'])
ID category
10 A
10 B
20 A
30 B
Run Code Online (Sandbox Code Playgroud)
预期结果:
ID A B
10 1 1
20 1 0
30 0 1
Run Code Online (Sandbox Code Playgroud)
我在尝试什么:
one_hot_columns = ['A','B']
lambdas = [lambda x: 1 if x.eq(column).any() else 0 for column in one_hot_columns]
df_g = df.groupby('ID').category.agg(lambdas)
Run Code Online (Sandbox Code Playgroud)
结果:
ID A B
10 1 1
20 0 0
30 1 1
Run Code Online (Sandbox Code Playgroud)
但是上面的结果并不完全是预期的结果。不知道我做错了什么。我知道我可以用 get_dummies 做到这一点,但使用 lambdas 更方便自动化。另外,我可以确保输出列的顺序。
使用crosstab:
pd.crosstab(df.ID, df['category']).reset_index()
Run Code Online (Sandbox Code Playgroud)
输出:
category ID A B
0 10 1 1
1 20 1 0
2 30 0 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |