pandas - 如何将多列分组为逗号分隔的输出
问题描述
我有以下数据框
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
对于 groupby 水果和市场以下是代码
df.groupby('Fruit')['Market'].value_counts().reset_index(name='Count')
但是如何获得以下输出?
Market Fruit1 Fruit2 Count Individual-Count1 Individual-Count2
r Apple Guava 3 2 1
k Jack 1 1
t Orange 1 1
只有唯一值应该在 Fruit1,Fruit2..
ie Groupby market and fruit and count in Count column and individual count of Fruit as comma separator value on the new column。
解决方案
我认为你需要:
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
编辑:
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
编辑:
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
推荐阅读
- vim - 无法打开 NERDTree 中文件名中不包含“+”或“~”的任何文件
- github-desktop - GitHub 桌面 Husky 预提交钩子没有
- python-3.x - 获取 sudo apt-get update 的完整输出
- video-processing - Openimaj 支持 gpgpu 吗?
- python - 如何将具有不同列表对的字典转换为数据框列和行?
- android - 安卓 GPS 问题
- python - 如何在 Sagemath 中旋转和定位轴标签
- python - 两个事件之间的 Epoch EEG 数据,而不是 min_max 秒?
- java - Java 递归:如何在一行中用逗号分隔 1..n 时避免最后一个逗号。查看里面的完整任务描述
- c# - 一对多验证竞争条件