聚合pandas中的聚合值会返回错误的结果

时间:2018-03-27 07:18:26

标签: python python-3.x pandas pandas-groupby

我有这样的dataframe - 每个交易可能会出现多个,而且交易链接到商店。我想找到交易的平均价值。为此我需要求和,然后求平均值:

#preparind dataset
txt_data = pandas.read_csv("./TestDataSource/txn.csv", sep = ';')
txt_data = txt_data.replace({',': '.'}, regex=True)
txt_data[['SALES']] = txt_data[[ 'SALES']].apply(pd.to_numeric)

enter image description here

我们len(txt_data.STORE.unique())只有30个独特的商店。

首先,我汇总了交易:

a1 = txt_data[['STORE', 'SALES', 'TXN']].groupby('TXN').sum()[['STORE', 'SALES']]
a.head()

enter image description here

一切似乎都没问题。但后来我在商店聚合:

a2 = a1.groupby('STORE').mean()
[![enter image description here][3]][3]

但是... list(a2.shape) - 返回[1137,1]。多数民众赞成在困惑。但此外len(a1.STORE.unique())返回1137

我做错了什么

3 个答案:

答案 0 :(得分:4)

根据STORE列的SALES汇总sumTXN列存在问题:

a1 = txt_data[['STORE', 'SALES', 'TXN']].groupby('TXN').sum()[['STORE', 'SALES']]

与...相同:

a1 = txt_data.groupby('TXN')['STORE', 'SALES'].sum()

但是,如果按列TXTSTORE进行汇总,那么效果很好:

txt_data = pd.read_csv("txn.csv", sep = ';', decimal=',')

a1 = txt_data.groupby(['TXN', 'STORE'], as_index=False)['SALES'].sum()

print (txt_data.STORE.nunique())
30

print (a1.STORE.nunique())
30

答案 1 :(得分:1)

在第

a1 = txt_data[['STORE', 'SALES', 'TXN']].groupby('TXN').sum()[['STORE', 'SALES']]

您要按TXN对数据框进行分组,但要告诉pandas将所有其他列相加,这样就可以得到store-id的总和以及"创建的新商店",例如:

txt_data[txt_data['TXN']==5541359000]  

               DAY  STORE   ART                    TXN      TIME    SALES
1268877 2015-10-01  1082    15294488        5541359000  09:30:22    60.2
1269093 2015-10-01  1082    80439           5541359000  09:30:29    15.6
1269309 2015-10-01  1082    191452          5541359000  09:30:15    4.0
1269525 2015-10-01  1082    15317962        5541359000  09:30:17    103.0

a1.head()
           STORE    SALES
TXN     
5541359000  4328    182.8

#1082 * 4 = 4328

答案 2 :(得分:1)

我认为您使用此行时会发生问题,

a1 = txt_data[['STORE', 'SALES', 'TXN']].groupby('TXN').sum()

当我使用txt_data获得唯一值时[' STORE']。unique()输出,

array([22691, 20581,  1574,  1602,  1579, 29245, 19009, 21761, 17474,
        1544,  1612,  1534,   958, 17096,  1094,  1596,  1594,  1609,
       24605,   956,   961,  1122, 27220,   974,  1082, 25039,  1530,
         999,  1053,   980])

但是在a1 Dataframe中, 存储值与txt_data不同,因为在STORE中group_by.sum()求和值以获得唯一的TXN' s。 enter image description here

请参阅:txt_data中没有STORE = 4328 [' STORE']。unique()

enter image description here

1082 * 4 = 4328