2017-09-12 344 views
2

因此,我有一个关于商店中客户数据集以及该商店每天的销售情况。如何将分组数据转换为熊猫分组数据

这看起来是这样的 -

Store ID  Sales  Customers 
1   250  500 
2   276  786 
3   124  256 
5   164  925 

我如何将其转换为分组数据,

Sales   Customers 
0-100   0 
100-200   1181 
200-300   1286 

...我已经寻找了一段时间,发现这个从大熊猫的网站是这样的 - http://pandas.pydata.org/pandas-docs/version/0.15.2/groupby.html

df2.groupby([ 'X'],排序=真)的.sum()

但我无法理解如何将这同样应用于我的示例。

回答

1

使用cut的垃圾箱,然后groupby和骨料sum

df = df.groupby(pd.cut(df['Sales'], [0,100,200,300]))['Customers'].sum().fillna(0) 
print (df) 
Sales 
(0, 100]   0.0 
(100, 200] 1181.0 
(200, 300] 1286.0 
Name: Customers, dtype: float64 

也可以定义标签:

l =['0-100','100-200','200-300'] 
b = [0,100,200,300] 
df = df.groupby(pd.cut(df['Sales'], bins=b, labels=l))['Customers'].sum() 
     .fillna(0)  
     .reset_index() 
print (df) 
    Sales Customers 
0 0-100  0.0 
1 100-200  1181.0 
2 200-300  1286.0 
+0

谢谢你,你的方法对我来说 –

1

使用pd.cut与cusom箱

In [2058]: df.groupby(pd.cut(df.Sales, [0, 100, 200, 300])).Customers.sum().fillna(0) 
Out[2058]: 
Sales 
(0, 100]   0.0 
(100, 200] 1181.0 
(200, 300] 1286.0 
Name: Customers, dtype: float64 

而且reset_index()重塑

In [2061]: (df.groupby(pd.cut(df.Sales, [0, 100, 200, 300])).Customers.sum() 
       .fillna(0).reset_index()) 
Out[2061]: 
     Sales Customers 
0 (0, 100]  0.0 
1 (100, 200]  1181.0 
2 (200, 300]  1286.0 

而且,使用labels自定义名称

In [2062]: (df.groupby(pd.cut(df.Sales, 
       bins=[0, 100, 200, 300], 
       labels=['0-100', '100-200', '200-300'])) 
     .Customers.sum().fillna(0).reset_index()) 
Out[2062]: 
    Sales Customers 
0 0-100  0.0 
1 100-200  1181.0 
2 200-300  1286.0 
1

np.searchsorted

labels = {0: '0-100', 1: '100-200', 2: '200-300'} 
s = np.searchsorted([100, 200], df.Sales) 
df.groupby(s).Customers.sum().reindex(
    pd.Index([0, 1, 2], name='Sales'), fill_value=0 
).rename(labels).reset_index() 

    Sales Customers 
0 0-100   0 
1 100-200  1181 
2 200-300  1286 
+0

工作,我能问些什么呢?我使用你的解决方案进行计时,看起来输出错误[here](https://stackoverflow.com/a/46091980/2901002)。我不知道什么是错的。你能检查它吗? – jezrael

+0

您的功能不接受参数。因此'数据'总是一样的。使用'stmt'参数:''{}(df)'.format(j)'。并将'data'放入您定义的每个函数的签名中。 'dropna(data)'和'notnull(data)'和'query(data)' – piRSquared

+0

谢谢,那么解决方案是什么? – jezrael