熊猫pivot_table和value_counts不同的结果

时间:2019-03-07 09:19:50

标签: python pandas

所以我有以下情况。我使用pd.value_counts()并获取例如以下系列:

A 50
B 30
C 15
D 10

然后我执行pd.pivot_table()(以了解X或Y是原因),并跨列求和并获得下表:

  X   Y  Sum
A 10  20 30
B  5  10 15
C  3   7 10
D 35  15 50

如您所见,pivot_table的“ Sum”值与value_counts系列不同。您还可以注意到,这些值只是顺序错误。为什么会这样,我该如何解决?

我检查并得出结论,数据透视表提供了错误的值,但是我找不到原因,也没有解决方法。

更新:添加了文件dataa.csv,这是我的代码:

dataa['class'].value_counts()

temp = dataa.pivot_table(values='ones', columns='xname', index='class', aggfunc=np.sum)
temp['sum'] = temp.sum(axis=1)

1 个答案:

答案 0 :(得分:1)

我尝试模拟您的问题,并像您的输出一样进行不同的工作:

d = {'a': ['A'] * 30 + ['B'] * 15 + ['C'] * 10 + ['D'] * 50,
     'b': ['X'] * 10 + ['Y'] * 20 + ['X'] * 5 + ['Y'] * 10 + 
          ['X'] * 3 + ['Y'] * 7 + ['X'] * 35 + ['Y'] * 15}
df = pd.DataFrame(d)

#aggregate counts
df1 = df.pivot_table(index='a',columns='b', aggfunc='size')
print (df1)
b   X   Y
a        
A  10  20
B   5  10
C   3   7
D  35  15

#by default values are sorted from top1
s = df['a'].value_counts()
print (s)
D    50
A    30
B    15
C    10
Name: a, dtype: int64

编辑:

使用您的数据进行测试并获得正确的输出:

dataa = pd.read_csv('dataa.csv', index_col=0)
print (dataa.head())
   class  ones xname
0     10     1    x0
1      6     1    x1
2     10     1    x1
3     10     1    x0
4      4     1    x0

print (dataa['class'].value_counts())
7     22
10    16
9     13
8     12
4     12
5     10
6      7
2      4
1      3
3      1
Name: class, dtype: int64

#if necessary sorted index
print (dataa['class'].value_counts().sort_index())
1      3
2      4
3      1
4     12
5     10
6      7
7     22
8     12
9     13
10    16
Name: class, dtype: int64

temp = dataa.pivot_table(values='ones', columns='xname', index='class', aggfunc=np.sum)
temp['sum'] = temp.sum(axis=1)
print (temp)
xname   x0    x1   x2   x3   sum
class                           
1      NaN   3.0  NaN  NaN   3.0
2      2.0   2.0  NaN  NaN   4.0
3      1.0   NaN  NaN  NaN   1.0
4      4.0   8.0  NaN  NaN  12.0
5      1.0   8.0  1.0  NaN  10.0
6      NaN   5.0  1.0  1.0   7.0
7      NaN  20.0  1.0  1.0  22.0
8      NaN  11.0  1.0  NaN  12.0
9      NaN  10.0  2.0  1.0  13.0
10     4.0   9.0  2.0  1.0  16.0