我有两个指数说:年和月。我用pivot来显示产品的数量。
现在,在我的df中,假设没有2020年7月和8月的记录。但透视图将显示这些月份和值0。我不希望透视表显示这些不相关的行(这些不存在于df中),因为它们会使我的最终透视表变得很长。如何减少这一点?
下面是我的例子df:
df = pd.DataFrame({'Product Type': ['Fruits', 'Fruits', 'Vegetable', 'Vegetable', 'Vegetable', 'Vegetable', 'Fruits', 'Fruits', 'Vegetables', 'Cars', 'Cars', 'Cars', 'Bikes', 'Bikes'],
'Product': ['Apple', 'Banana', 'Apple', 'Apple', 'Brocoli', 'Carrot', 'Apple', 'Banana', 'Brocoli', 'BMW M3', 'BMW M3', 'BMW M3', 'Hayabusa', 'Hayabusa'],
'Amount': [4938, 3285, 4947, 1516, 2212, 3778, 1110, 4436, 1049, 494, 2818, 3737, 954, 4074],
})
到目前为止的代码:
import pandas as pd
import numpy as np
df = pd.read_csv('try.csv')
bins = [0,1000,2000,5000,float(np.inf)]
labels = ['0-1000','1000-2000','2000-5000','5000+']
df['bins'] = pd.cut(df['Amount'],bins=bins, labels=labels, right=True)
pivot = df.pivot_table(index=['Product Type','Product'],columns='bins', aggfunc='size')
pivot.dropna(inplace=True)
pivot
预期输出:
Amount 0-1000 1000-2000 2000-5000 5000+
Product Type Product
Bikes Hayabusa 1 0 1 0
Cars BMW M3 1 0 2 0
Fruits Apple 0 1 1 0
Banana 0 0 2 0
Vegetable Apple 0 1 1 0
Brocoli 0 0 1 0
Carrot 0 0 1 0
Vegetables Brocoli 0 1 0 0
在df中,Bikes只包含'hayabusa',我希望它在我的Pivot的Bike类别中。我该怎么做?
2条答案
按热度按时间sg24os4d1#
使用
cut
和crosstab
:输出:
使用的输入:
5fjcxozz2#
在不知道你的数据是什么样子的情况下,下面是我试图提供一个答案:
以下是一些示例数据:
我已将2020年7月和2020年8月的数据设置为缺失/NaN。
考虑到你使用一个带有年和月索引的枢轴,我假设如下所示:
请注意,在pivot的末尾链接“.dropna()”如何将2020年7月和2020年8月从输出中排除。