2016-05-17 7 views
1

Ich habe das folgende Skript, von denen ich eine einfache Gruppe wollen durch:Wie gibst du nur eine Gruppe in Pandas zurück?

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

Dies schafft eine Pandas Gruppe von Objekt.

Ich möchte dann ausgeben, dies zu übertreffen:

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

aber es gibt einen Fehler zurück:

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

Warum sollte ich eine Anwendung benötigen? Ich möchte nur die Gruppe nach Ergebnissen, um Duplikate zu entfernen.

+0

Try 'dft.apply (lambda x: x.to_excel (Schriftsteller, 'test', index = Falsch)) ' – EdChum

+0

@EdChum Das funktioniert nicht, es gibt die 6 Zeilen für Portfolio 'C' zurück – toasteez

+0

Was haben Sie vor? Ein 'groupby' ist für Aggregationen in Gruppen gedacht. Warum setzen Sie den Index nicht einfach auf diese Spalten und geben ihn in Excel aus? – EdChum

Antwort

2

Sie können in der Tat Duplikate fallen groupby verwenden, indem Sie den ersten oder den Mittelwert jeder Gruppe nehmen, wie:

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

Beachten Sie, dass Sie eine Funktion anwenden müssen (in diesem Fall die mean oder first Methoden) um einen DataFrame aus dem groupby-Objekt zurück zu holen. Dies kann dann in Excel geschrieben werden.

Aber wie @EdChum stellt in diesem Fall die drop_duplicates Methode eines Datenrahmen unter Verwendung der leichte Ansatz:

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

Da der Datenrahmen nur aus diesen vier Feldern besteht, können Sie drop_duplicates() ohne Parameter verwenden. – knagaev

+0

@knagaev In der Tat! In diesem Fall ist das die einfachste Lösung. – joris

Verwandte Themen