使用重复项旋转非数字数据,而不会在pandas中进行聚合,从而保留所有重复项

时间:2017-06-23 06:16:08

标签: python pandas

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')

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

1 个答案:

答案 0 :(得分:1)

这太丑了!不是我最骄傲的时刻。

null