在pandas&中重复和转置列数据。蟒蛇

时间:2017-12-07 23:50:03

标签: python pandas duplicates

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

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

基本上,我想对列进行重复数据删除并填充关联的行数据。

非常感谢!

1 个答案:

答案 0 :(得分:0)

假设您的行始终具有“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)