2017-06-23 1 views
2

Ich habe die folgenden. Datenrahmen:Heatmap-Zählung basierend auf Pandas Datenrahmen erhalten

ps_variable_1 ps_variable_2 
0  Top 33% Middle 33% 
1  Bottom 33% Middle 33% 
2  Middle 33% Middle 33% 
3  Bottom 33%  Top 33% 
4  Middle 33% Bottom 33% 
5  Top 33% Bottom 33% 
6  Top 33% Bottom 33% 
7  Bottom 33% Middle 33% 
8  Bottom 33%  Top 33% 

ich einen neuen Datenrahmen aus ihm heraus mit 3 Spalten erhalten möchten: Top 33% Middle 33% Bottom 33%. Jede Spalte hat drei Zeilen wie folgt:

   Top 33%  Middle 33% Bottom 33% 
Top 33%   
Middle 33%   
Bottom 33%   

Für jede Gitterzelle, mag ich die Anzahl der Vorkommen auf dem Datenrahmen über die Basis zählen. Z.B. Die erste Zeile enthält die Anzahl der Fälle, in denen ps_variable_1 in den oberen 33% oder oberen Drittel-Perzentil ist, und die entsprechende Anzahl der Fälle, in denen ps_variable_2 jeweils im oberen Drittel, mittleren Drittel und unteren Drittel liegt. Wie mache ich das, würde ich eine Lösung bevorzugen, die auf andere Verhältnisse erweitert werden kann, z. Top 20% ....

Antwort

4

Option 1
pd.crosstab

pd.crosstab(df.ps_variable_1, df.ps_variable_2) 

Option 2
groupby und size

df.groupby(['ps_variable_1', 'ps_variable_2']).size().unstack(fill_value=0) 

Option 3
np.bincount

u1, f1 = np.unique(df.ps_variable_1.values, return_inverse=True) 
u2, f2 = np.unique(df.ps_variable_2.values, return_inverse=True) 
n, m = u1.size, u2.size 
b = np.bincount(f1 * m + f2, minlength=n * m).reshape(n, m) 
pd.DataFrame(b, u1, u2) 
+0

dank @piRSquared, ist dies ein großer Lsg! – user308827

+1

@ user308827 das ist eine Erleichterung. Ich habe von meinem Handy aus geantwortet, ohne prüfen zu können (-: – piRSquared

Verwandte Themen