首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多列分组为逗号分隔的输出

如何将多列分组为逗号分隔的输出
EN

Stack Overflow用户
提问于 2019-03-20 09:58:03
回答 1查看 304关注 0票数 2

我有以下数据

代码语言:javascript
复制
import pandas as pd
d= {
    'ID':[1,2,3,4,5],
    'Fruit':['Jack','Apple','Guava','Orange','Apple],
    'Market':['k','r','r','t','r]
}
df= pd.DataFrame(data=d)
df

对于集团水果和市场,下面是代码

代码语言:javascript
复制
df.groupby('Fruit')['Market'].value_counts().reset_index(name='Count')

但是如何获得以下输出呢?

代码语言:javascript
复制
Market  Fruit1 Fruit2   Count   Individual-Count1  Individual-Count2
r       Apple   Guava   3        2                 1
k       Jack            1         1
t       Orange          1         1

只有唯一的值应该在Fruit1,Fruit2.

即团购市场和水果,计数栏和单独计数的水果作为逗号分隔的价值在新的栏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 10:01:32

我觉得你需要:

代码语言:javascript
复制
f = lambda x: ','.join(x.value_counts().astype(str))
d = {'Market':'count', 'ID':'Individual-Count'}

df1 = (df.groupby('Market')
        .agg({'Fruit':','.join, 'Market':'size', 'ID':f})
        .rename(columns=d)
        .reset_index())

print (df1)
  Market        Fruit  count Individual-Count
0      k         Jack      1                1
1      r  Apple,Guava      2              1,1
2      t       Orange      1                1

编辑:

代码语言:javascript
复制
def f(x):
    v = x['Fruit'].value_counts()
    a = pd.Series(v.index)
    b = pd.Series(v.values)
    return pd.DataFrame({'Fruit':a, 'Individual-Count':b})

df1 = df.groupby('Market').apply(f).unstack()
df1.columns = [f'{a}{b+1}' for a, b in df1.columns]

df1['count'] = df1.index.map(df['Market'].value_counts().get)
df1 = df1.reset_index()
print (df1)
  Market  Fruit1 Fruit2  Individual-Count1  Individual-Count2  count
0      k    Jack    NaN                1.0                NaN      1
1      r   Apple  Guava                2.0                1.0      3
2      t  Orange    NaN                1.0                NaN      1

编辑:

代码语言:javascript
复制
def f(x):
    v = x['Fruit'].value_counts()
    return pd.Series({'Fruit':', '.join(v.index), 
                      'Individual-Count':','.join(v.astype(str).values)})

df1 = df.groupby('Market').apply(f)
df1['count'] = df1.index.map(df['Market'].value_counts().get)
df1 = df1.reset_index()
print (df1)
  Market         Fruit Individual-Count  count
0      k          Jack                1      1
1      r  Apple, Guava              2,1      3
2      t        Orange                1      1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55258014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档