【发布时间】:2017-06-23 15:10:17
【问题描述】:
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 时都需要非唯一索引,或者需要聚合。我还尝试使用带有 append=True 和 unstacking 的 set_index,但最终得到了
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')
有没有更好的方法可以开箱即用?
【问题讨论】: