Pandas由两个相似的列和两个不同的列组成

2024-03-28 11:21:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的数据帧:

    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

我如何将它们分组?你知道吗


Tags: 数据nameidmatchjohnthingbelongs
1条回答
网友
1楼 · 发布于 2024-03-28 11:21:55
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

相关问题 更多 >