我有以下脚本,我想要一个简单的组:
# 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
为什么我需要申请?我只希望按结果分组删除重复项。
答案 0 :(得分:2)
您确实可以使用groupby
删除重复项,方法是采用每个组的第一个或平均值,例如:
df.groupby(['Date', 'Portfolio', 'Duration', 'Yield'], as_index=False).mean()
df.groupby(['Date', 'Portfolio', 'Duration', 'Yield'], as_index=False).first()
请注意,您必须应用函数(在本例中使用mean
或first
方法)从groupby对象获取DataFrame。然后可以将其写入excel。
但正如@EdChum所说,在这种情况下,使用数据框的drop_duplicates
方法是更简单的方法:
df.drop_duplicates(subset=['Date', 'Portfolio', 'Duration', 'Yield'])