2016-04-07 12 views
1

Ich habe einen Datenrahmen, die etwas ähnlich wie diesePivot-Tabelle (?) Mit einem Pandas Dataframe

id name value 
a  Adam 5 
b  Eve  6 
c  Adam 4 
a  Eve  3 
d  Seth 2 
b  Adam 4 
a  Adam 2 

Ich sehe ich versuche, ist, wie viele id s mit, wie viele Namen zugeordnet sind, und die Überlappung zwischen ihnen. Ich habe eine Gruppe auf der ID-Spalte gemacht und dann konnte ich sehen, wie viele IDs wie viele Namen mit ihnen verbunden sind.

df.groupby('id')['name'].nunique().value_counts() 

Was ich möchte jetzt ist eine Möglichkeit, einen Tisch zu bekommen, wo die Namen der Spaltennamen sind und der Index ist die ID und der Wert ist die Summe für jede ID und Name. Ich könnte es für eine for-Schleife machen, indem ich einen DataFrame initialisiere, wo die Spalten die Werte in der Namensspalte sind, aber ich frage mich, ob es eine Pandas-Art gibt, etwas so zu erreichen?

Antwort

2

ist das was du willst?

In [54]: df.pivot_table(index='id', columns='name', values='value', aggfunc='sum') 
Out[54]: 
name Adam Eve Seth 
id 
a  7.0 3.0 NaN 
b  4.0 6.0 NaN 
c  4.0 NaN NaN 
d  NaN NaN 2.0 

oder ohne Nans:

In [56]: df.pivot_table(index='id', columns='name', values='value', aggfunc='sum', fill_value=0) 
Out[56]: 
name Adam Eve Seth 
id 
a  7 3  0 
b  4 6  0 
c  4 0  0 
d  0 0  2 
+0

Genau das, was ich wollte, danke! – Linda