import numpy as np
import pandas as pd
NaN = np.nan
df = pd.DataFrame(
{'a':['y',NaN,'y',NaN,NaN,'x','x','y',NaN],
'b':[NaN,'x',NaN,'y','x',NaN,NaN,NaN,'y'],
'd':[32,12,55,98,23,11,9,91,3]})
melted = pd.melt(df, id_vars=['d'], value_vars=['a', 'b'])
result = pd.pivot_table(melted, values='d', index=['value'], columns=['variable'],
aggfunc=np.median)
print(result)
Ausbeuten
variable a b
value
x 10.0 17.5
y 55.0 50.5
Erläuterung:
Melting the DataFrame mit melted = pd.melt(df, value_vars=['a', 'b'])
produziert
d variable value
0 32 a y
1 12 a NaN
2 55 a y
3 98 a NaN
4 23 a NaN
5 11 a x
6 9 a x
7 91 a y
8 3 a NaN
9 32 b NaN
10 12 b x
11 55 b NaN
12 98 b y
13 23 b x
14 11 b NaN
15 9 b NaN
16 91 b NaN
17 3 b y
und jetzt können wir pd.pivot_table
verwenden, um die d
Werte zu schwenken und aggregieren:
result = pd.pivot_table(melted, values='d', index=['value'], columns=['variable'],
aggfunc=np.median)
Beachten Sie, dass die aggfunc
eine Liste von Funktionen übernehmen, wie [np.sum, np.median, np.min, np.max, np.std]
wenn Sie die Daten in mehr als einer Weise zusammenfassen wollen .
@unutbu: Sorry, du hast Recht, die zweite Zeile sollte y 2 1. Ich habe es bearbeitet. – HappyPy