gpt4 book ai didi

python - 透视具有重复项的非数值数据,不在 Pandas 中聚合,保留所有重复项

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:09 25 4
gpt4 key购买 nike

TLDR:我一直在尝试寻找一种内置解决方案来对具有重复项的非数字数据进行透视,而无需在 pandas 中进行聚合,从而使所有重复项都不会成功。我进行了自定义操作,但我想了解是否有更好的方法。

我想从这种格式获取我的数据:

    CAT     FLDNAME Value
0 CAT 1 DIM1 A
1 CAT 1 DIM2 B
2 CAT 1 DIM2 C
3 CAT 2 DIM1 D
4 CAT 2 DIM2 E
5 CAT 2 DIM2

    CAT     DIM1    DIM2
0 CAT 1 A B
1 CAT 1 A C
2 CAT 2 D E
2 CAT 2 D

可能性:

No duplicates among grouping columns. Does not require aggregation

- pivot
- set_index

Duplicates among grouping columns. Does require aggregation

- pivot_table
- groupby

根据 piRSquared 在 Pivot a pandas DataFrame to be the correct format: `DataError: No numeric types to aggregate` 中的总结

上述所有方法在拆栈 FLDNAME 时都需要非唯一索引,或者需要聚合。我还尝试将 set_index 与 append=True 一起使用并取消堆叠,但最终以

    CAT     DIM1    DIM2
0 CAT 1 A
1 CAT 1 B
2 CAT 1 C
3 CAT 2 D
4 CAT 2 E
4 CAT 2

但是,我使用以下方法从类别 (CAT) 创建了一个 DataFrame,并逐步重命名并左连接了 FLDNAME 中的分组 DIM。

cats = df.CAT.unique()
df2 = pd.DataFrame(cats, columns=['CAT'])

for i, grp in df.groupby('FLDNAME'):
grp.columns = ['CAT', 'FLDNAME', i]
df2 = df2.merge(grp[['CAT', i]], how='left', on='CAT')

有没有更好的方法可以开箱即用?

最佳答案

这太丑了!这不是我最自豪的时刻。

cols = ['CAT', 'FLDNAME']
df.set_index(
cols + [df.groupby(cols).cumcount()]
).Value.unstack('FLDNAME').ffill().reset_index(
1, drop=True
).rename_axis(None, 1).reset_index()

CAT DIM1 DIM2
0 CAT 1 A B
1 CAT 1 A C
2 CAT 2 D E

关于python - 透视具有重复项的非数值数据,不在 Pandas 中聚合,保留所有重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44714292/

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