簡體   English   中英

Pandas groupby:將不同的值合並到另一列中

[英]Pandas groupby: combine distinct values into another column

我需要按列的子集進行分組,並計算其值的不同組合數。 但是,還有其他列可能具有也可能沒有不同的值,因此我想以某種方式將此信息保留在輸出中。 這是一個例子:

gb1          gb2         text1   text2
bebop        skeletor    blue    fisher
bebop        skeletor    blue    wright
rocksteady   beast_man   orange  haldane
rocksteady   beast_man   orange  haldane
tokka        kobra_khan  green   lande
tokka        kobra_khan  red     arnold

只是想通過組gb1gb2

這是我需要的:

gb1          gb2         count   text1        text2
bebop        skeletor    2       blue         fisher, wright
rocksteady   beast_man   2       orange       haldane
tokka        kobra_khan  2       green, red   lande, arnold

除了處理text1text2列之外,我已完成所有工作。

提前致謝。

您可以檢查

s=df.assign(count=1).groupby(['gb1','gb2']).agg({'count':'sum','text1':lambda x : ','.join(set(x)),'text2':lambda x : ','.join(set(x))}).reset_index()
s
          gb1         gb2  count      text1          text2
0       bebop    skeletor      2       blue  wright,fisher
1  rocksteady   beast_man      2     orange        haldane
2       tokka  kobra_khan      2  green,red   lande,arnold

您可以結合使用applytransform

如果df是您的原始數據幀:

def combine(xx):
    dd = xx.transform(lambda x : ','.join(set(x)))
    dd['count'] = len(xx)
    return dd

ddf = df.groupby(['gb1', 'gb2']).apply(combine)

對於您的示例數據幀, ddf為:

                           text1          text2  count
gb1        gb2                                        
bebop      skeletor         blue  fisher,wright      2
rocksteady beast_man      orange        haldane      2
tokka      kobra_khan  red,green   lande,arnold      2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM