2016-11-29 56 views
2

首先,我很抱歉!這是我第一次使用堆棧溢出,所以我希望我做對了!我搜索,但無法找到我在找什麼。 我也是熊貓和蟒蛇相當新:) 我將嘗試使用一個例子,我會嘗試清楚。熊貓樞軸表,如何在值屬性中放入一系列的列

我有一個包含30列的數據框,其中包含有關購物車的信息,其中1列(順序)有2個值,或者正在完成。 而且我有20列的項目,可以說蘋果,橙子,香蕉......而且我需要知道有多少次完整訂單中有一個蘋果,以及正在進行的訂單中有多少個蘋果。我決定使用具有聚合函數計數的數據透視表。 這將是數據幀的一個小例子:

Order  | apple | orange | banana | pear | pineapple | ... | 
-----------|-------|--------|--------|------|-----------|------| 
completed | 2 | 4 | 10 | 5 | 1  |  | 
completed | 5 | 4 | 5 | 8 | 3  |  | 
iProgress | 3 | 7 | 6 | 5 | 2  |  | 
completed | 6 | 3 | 1 | 7 | 1  |  | 
iProgress | 10 | 2 | 2 | 2 | 2  |  | 
completed | 2 | 1 | 4 | 8 | 1  |  | 

我有輸出我想,但我正在尋找的是選擇很多列,而無需手動鍵入這些更優雅的方式。

df.pivot_table(index=['Order'], values=['apple', 'bananas', 'orange', 'pear', 'strawberry', 
    'mango'], aggfunc='count') 

但我想選擇約15列,因此而不是鍵入一個個的15倍,我敢肯定有通過使用列編號或東西做的一個簡單的方法。假設我想選擇從6到15的列。

我嘗試過類似values = [df.columns [6:15]]的事情,我也嘗試過使用df.iloc,但正如我所說的,我很新,所以我可能會使用錯誤的東西或做出愚蠢的事情!

有沒有辦法讓他們按照他們的順序?因爲在我的回答中,他們似乎已按字母順序排列,我想保留列的順序。因此,它應該是蘋果,橘子,香蕉......

Order  Completed In progress 
apple   92    221 
banana   102   144 
mango   70    55 

我只是在尋找提高我的代碼的方式,我希望我還沒有取得很大的混亂。謝謝!

回答

2

我認爲你可以使用:

#if need select only few columns - df.columns[1:3] 
df = df.pivot_table(columns=['Order'], values=df.columns[1:3], aggfunc='count') 
print (df) 
Order completed iProgress 
apple   4   2 
orange   4   2 

#if need use all column, parameter values can be omit 
df = df.pivot_table(columns=['Order'], aggfunc='count') 
print (df) 

Order  completed iProgress 
apple    4   2 
banana    4   2 
orange    4   2 
pear    4   2 
pineapple   4   2 

What is the difference between size and count in pandas?

df = df.pivot_table(columns=['Order'], aggfunc=len) 
print (df) 
Order  completed iProgress 
apple    4   2 
banana    4   2 
orange    4   2 
pear    4   2 
pineapple   4   2 

#solution with groupby and transpose 
df = df.groupby('Order').count().T 
print (df) 
Order  completed iProgress 
apple    4   2 
orange    4   2 
banana    4   2 
pear    4   2 
pineapple   4   2 
+0

謝謝您的回答,我嘗試,但我得到這個錯誤:KeyError異常:[「蘋果」,'香蕉','橙']不在索引中「當我使用這種風格'df = df.pivot_table(columns = ['Order'],values = df.columns [1:3],aggfunc ='count')'So可能問題在其他地方? –

+0

好的,那麼第二和第三列是'apple'和'orange'?在樣例print [df.columns [1:3])' - 'Index(['apple','orange '],dtype ='object')' – jezrael

+0

python從'0開始計數,所以第一列是'df.columns [0]',第二'1' ... – jezrael

1

您的例子沒有表現出前充足的物品不在購物車中。我假設它出現爲None0。如果這是正確的,那麼我填NA值,並計算多少都大於0

df.set_index('Order').fillna(0).gt(0).groupby(level='Order').sum().T 

enter image description here

+0

是的,這也適用,但數量而不是總和,這是我正在尋找。問題是我不想選擇所有的列,只有其中的一些列,但他們太多,無法手動輸入。所以這就是我尋找分揀機的原因。但這有助於我的訂購:) –