pandas groupby两个simmilar列和两个不同

时间:2017-05-18 19:43:38

标签: python pandas dataframe

我有这样的数据框:

    ID | Name | Thing | belongs | match
    ---+------+-------+---------+-----
     1   John     10     1,2,3     9
     2   John     10      2,4      8
输出应该是:

John 10 1,2,3,2,4 9,9,9,8,8

我如何对它们进行分组?

1 个答案:

答案 0 :(得分:1)

def f(df):
    lol = df.belongs.str.split(',').tolist()
    lens = [len(lst) for lst in lol]
    belongs = ','.join(map(str, np.concatenate(lol)))
    match = ','.join(map(str, df.match.repeat(lens).tolist()))

    return pd.Series(dict(
            belongs=belongs,
            match=match
        ))

df.groupby(['Name', 'Thing']).apply(f).reset_index()

   Name  Thing    belongs      match
0  John     10  1,2,3,2,4  9,9,9,8,8

略有不同的方法。确定差异是读者留下的任务。

def f(df):
    lens = df.belongs.str.count(',') + 1
    belongs = df.belongs.str.cat(sep=',')
    match = df.match.repeat(lens).map(str).str.cat(sep=',')

    return pd.Series(dict(
            belongs=belongs,
            match=match
        ))

print(df.groupby(['Name', 'Thing']).apply(f).reset_index())

   Name  Thing    belongs      match
0  John     10  1,2,3,2,4  9,9,9,8,8