2016-05-17 47 views
1

我有以下腳本,我想要一個簡單的GROUP BY:你如何在熊貓中只返回一個羣組?

# import the pandas module 
import pandas as pd 
from openpyxl import load_workbook 

writer = pd.ExcelWriter(r'D:\temp\test.xlsx', engine='openpyxl') 
# Create an example dataframe 
raw_data = {'Date': ['2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13','2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13', '2016-05-13'], 
     'Portfolio': ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B','B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C'], 
     'Duration': [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3], 
     'Yield': [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1],} 

df = pd.DataFrame(raw_data, columns = ['Date', 'Portfolio', 'Duration', 'Yield']) 

dft = df.groupby(['Date', 'Portfolio', 'Duration', 'Yield'], as_index =False) 

這由對象創建一個熊貓集團。

然後我想其輸出到Excel中:

dft.to_excel(writer, 'test', index=False) 
writer.save() 

但是它返回一個錯誤:

AttributeError: Cannot access callable attribute 'to_excel' of 'DataFrameGroupBy' objects, try using the 'apply' method 

爲什麼我需要申請嗎?我只希望按結果分組來刪除重複項。

+0

嘗試'dft.apply(拉姆達X:x.to_excel(作家, '測試',指數= FALSE))' – EdChum

+0

@EdChum這並不工作,它返回6行的投資組合「C」 – toasteez

+0

什麼是你的本意嗎?一個'groupby'用於組上的聚合,爲什麼你不只是將索引設置爲那些列並輸出爲excel? – EdChum

回答

2

您確實可以降使用groupby,重複以第一或各組的平均值,如:

df.groupby(['Date', 'Portfolio', 'Duration', 'Yield'], as_index=False).mean() 
df.groupby(['Date', 'Portfolio', 'Duration', 'Yield'], as_index=False).first() 

請注意,您必須使用meanfirst方法應用功能(在這種情況下, )從groupby對象中取回一個DataFrame。這可以寫入excel。

但作爲@EdChum指出,在這種情況下使用數據框的drop_duplicates方法是最簡便的方法:

df.drop_duplicates(subset=['Date', 'Portfolio', 'Duration', 'Yield']) 
+0

由於數據幀由這四個字段組成,因此只有您可以使用不帶任何參數的drop_duplicates()。 – knagaev

+0

@knagaev確實!在這種情況下,這是最簡單的解決方案。 – joris