【问题标题】:Pivot non-numerical data with duplicates, without aggregation in pandas, keeping all duplicates旋转具有重复项的非数值数据,在 pandas 中不进行聚合,保留所有重复项
【发布时间】: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')

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    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
    

    【讨论】:

    • 我应该再添加一个问题:我使用的数据集包含空值,即并非所有 CAT 都具有所有 DIM,并且某些 DIM 的值特别为空,因此填充最终会被覆盖空值。很抱歉不清楚。编辑:一旦我删除填充似乎工作!
    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2017-11-18
    • 2021-07-13
    • 1970-01-01
    • 2018-05-27
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多