当我尝试过滤Pandas数据框时,如下例所示,它可以正常工作:
print data[data['ProductCategory'].isin(['ProductA'])]
但是当我尝试在生成的数据透视表上执行相同操作时:
pivot = pandas.pivot_table(
data,index=['ProductCategory', 'Currency', 'Producer'],
values=['Price','Quantity','FxRate'],
aggfunc={'Price': np.sum, 'Quantity': np.sum,'FxRate': np.mean})
print pivot[pivot['ProductCategory'].isin(['ProductA'])]
我收到一个关键错误:
文件“pandas \ index.pyx”,第134行,在pandas.index.IndexEngine.get_loc(pandas \ index.c:3838) 在pandas.index.IndexEngine.get_loc中文件“pandas \ index.pyx”,第154行(pandas \ index.c:3718) 在pandas.hashtable.PyObjectHashTable.get_item中文件“pandas \ hashtable.pyx”,第686行,(pandas \ hashtable.c:12294) 在pandas.hashtable.PyObjectHashTable.get_item中文件“pandas \ hashtable.pyx”,第694行(pandas \ hashtable.c:12245) KeyError:'ProductCategory'
数据透视表的describe()给出了:
FxRate Price Quantity
count 48.00 48.00 48.00
mean 0.93 4,717,051.34 46,446,338.82
std 0.20 20,603,134.35 188,008,495.83
min 0.64 -16,088,043.02 -137,804,378.35
25% 0.73 -87,306.39 83.75
50% 1.00 41,198.26 682,025.97
75% 1.00 2,999,491.53 7,489,198.82
max 1.25 137,804,362.15 939,610,000.00
pivot.info()提供以下输出:
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 48 entries, (ProductA, ProductB, ProductC) to (ProducerA, ProducerB, ProducerC)
Data columns (total 3 columns):
FxRate 48 non-null float64
Price 48 non-null float64
Quantity 48 non-null float64
dtypes: float64(3)
memory usage: 2.3+ KB
None
并且pivot.head()给出了这个:
FxRate Price Quantity
ProductCategory Currency Producer
ProductA EUR ProducterA 1.00 0.90 1.10
ProducterB 1.00 0.90 1.10
GBP ProducterB 1.25 1.12 1.37
ProductB EUR ProducterA 1.00 0.90 1.10
GBP ProducterC 1.25 1.12 1.37
答案 0 :(得分:1)
ProductCategory
,Currency
和Producer
现在是groupby
操作后的索引的一部分。尝试重置名为pivot.reset_index(inplace=True)
的DataFrame的索引,然后使用loc
照常进行选择。
>>> pivot[pivot['ProductCategory'].isin(['ProductA'])]
ProductCategory Currency Producer FxRate Price Quantity
0 ProductA EUR ProducterA 1.00 0.90 1.10
1 ProductA EUR ProducterB 1.00 0.90 1.10
2 ProductA GBP ProducterB 1.25 1.12 1.37
然后,您可以根据需要重置结果上的索引。
或者,您可以在原始loc
上使用pivot
,如下所示:
>>> pivot.loc['ProductA']
FxRate Price Quantity
Currency Producer
EUR ProducterA 1.00 0.90 1.10
ProducterB 1.00 0.90 1.10
GBP ProducterB 1.25 1.12 1.37