2016-05-17 24 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