所以我有以下情况。我使用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)
答案 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