我有这样的数据框:

    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


我如何将它们分组?

最佳答案

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

关于python - Pandas groupby两个相似的专栏和两个不同的专栏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44056537/

10-11 19:45