【问题标题】:De-duplicating and transposing columns data in pandas & pythonPandas 和 python 中的重复数据删除和转置列数据
【发布时间】:2018-05-22 04:30:06
【问题描述】:

我有一个看起来像这样的数据框

Column1-Column2
a      - 12
b      - t1
c      - t3
d      - 798
a      - 87
b      - g1
a      - 478
c      - f1
d      - 906

我想得到一个这样的数据框:

Columns: 
a, b, c, d
Rows:
12, t1, t3, 798
87, g1, -, -
478, -, f1, 906

基本上,我想删除列并填充相关的行数据。

非常感谢!

【问题讨论】:

    标签: python pandas duplicates


    【解决方案1】:

    假设你的行总是有 'a' 列值,你可以这样做:

    #standard imports
    import pandas as pd
    
    initial = pd.DataFrame(
        {
            'Column1' : [
                'a',
                'b',
                'c',
                'd',
                'a',
                'b',
                'a',
                'c',
                'd'
            ],
            'Column2':[
                '12',
                't1',
                't3',
                '798',
                '87',
                'g1',
                '478',
                'f1',
                '906'
            ]
        }
    )
    
    pivoted = initial.pivot(columns='Column1', values='Column2')
    
    target = pivoted.groupby(pivoted.apply(lambda x: 1 if x[0]!=None else 0, axis=1).cumsum())[pivoted.columns].agg(lambda x: ''.join([el for el in x if el!=None]))
    

    如果您可以缺少“a”值,那么它会变得更加棘手。这就是为什么在您的问题中提供具有代表性的示例如此重要的原因。

    编辑:

    迭代方法,如果您可以连续有不存在的 'a' 值:

    #use `initial` dataframe from answer above
    target = pd.DataFrame(columns=['a', 'b', 'c', 'd'])
    newrow = dict()
    for index, row in initial.iterrows():
        if row['Column1'] in newrow:
            target=target.append(newrow, ignore_index=True)
            newrow=dict()
        newrow[row['Column1']]=row['Column2']
    
    target=target.append(newrow, ignore_index=True)
    

    【讨论】:

    • 谢谢亚当,但我确实举了一个例子。我确实有许多由“-”表示的空值
    • 你所有的 'a' 值都不为空,这就是为什么我做了一个简化的假设。此外,您的数据集必须手动重新键入以重现案例,因为它不是作为列表或字典分配给出的,只是一个原始结果。看看我的代码,你可以复制粘贴它来重现我的结果。这就是应该如何提出问题的方式。无论如何 - 我的回答对你有用吗?
    • 我已经编辑了答案以适应不存在的“a”值。不像最初的解决方案那样干净,但更通用。
    • 非常感谢 - 我会试试看。
    猜你喜欢
    • 1970-01-01
    • 2021-10-14
    • 2021-12-06
    • 2013-06-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    相关资源
    最近更新 更多