你如何在熊猫中只返回一个小组?

时间:2016-05-17 10:36:24

标签: python pandas

我有以下脚本,我想要一个简单的组:

# 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)

这会按对象创建一个pandas组。

然后我想把它输出到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

为什么我需要申请?我只希望按结果分组删除重复项。

1 个答案:

答案 0 :(得分: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'])