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
根据Pivot a pandas DataFrame to be the correct format: `DataError: No numeric types to aggregate`
中的piRSquared摘要上述所有方法在拆卸FLDNAME时需要非唯一索引,或者需要聚合。我还尝试使用set_index,其中append = True和unstacking,但结果是
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')
有没有更好的方法可以开箱即用?
答案 0 :(得分:1)
这太丑了!不是我最骄傲的时刻。
null