Ich habe einen Datenrahmen, über den wir einen Proxy erstellen können

df = pd.DataFrame({'a':[1,0,0], 'b':[0,1,0], 'c':[1,0,0], 'd':[2,3,4]})

Und eine Kategorieserie

category = pd.Series(['A', 'B', 'B', 'A'], ['a', 'b', 'c', 'd'])

Ich möchte eine Summe der Spalten von df erhalten, die in die Kategorien 'A', 'B' eingeteilt sind. Vielleicht so etwas wie:

result = df.groupby(??, axis=1).sum()

Rückkehr

result = pd.DataFrame({'A':[3,3,4], 'B':[1,1,0]})
3
rhaskett 19 Apr. 2018 im 19:47

3 Antworten

Beste Antwort

Verwenden Sie groupby + sum für die Spalten (hier ist axis=1 wichtig):

df.groupby(df.columns.map(category.get), axis=1).sum()

   A  B
0  3  1
1  3  1
2  4  0
5
cs95 19 Apr. 2018 im 16:50

Nach reindex können Sie die Kategorie der Spalte von df zuweisen

df=df.reindex(columns=category.index)
df.columns=category
df.groupby(df.columns.values,axis=1).sum()
Out[1255]: 
   A  B
0  3  1
1  3  1
2  4  0

Oder pd.Series.get

df.groupby(category.get(df.columns),axis=1).sum()
Out[1262]: 
   A  B
0  3  1
1  3  1
2  4  0
3
YOBEN_S 19 Apr. 2018 im 16:53

Hier, was ich getan habe, um Datenrahmen mit ähnlichen Spaltennamen zu gruppieren

Data_df:

1    1    2   1

q    r   f    t

Code:

df_grouped = data_df.groupby(data_df.columns, axis=1).agg(lambda x: ' '.join(x.values))

Df_grouped:

1       2
q r t   f
0
Ganesh Kharad 13 Juni 2019 im 05:48