2017-12-18 1 views
1

Ich muss das Maximum von zwei Spalten (p_1_logreg, p_2_logreg) finden, wo der Vergleich nur auf 14 Zeilen beschränkt werden sollte.Group-by-Werte von Splitting-Indizes

enter image description here

My csv file

Ich versuchte meinen Index in schneiden:

int1_str1_str2_int2_str3_int4 

Die max sollte zwischen den Zeilen zu finden, wo INT1, STR1, STR2 Int2- und str3 befestigt sind, und nur Das int4 würde sich ändern (von Index 0 zu Index 13 usw.).

Ich habe versucht, jedes Element auf einmal zu beheben und groupby verwenden, aber ich konnte nicht nur über int4 Wert iterieren.

Hier ist der Code, um das Maximum für Spalte p_1_label zu finden, aber das Ergebnis ist nicht das, was ich suche.

max_1_row=raw_prob.loc[raw_prob.groupby(raw_prob['id'].str.split('_').str[1])['p_1_'+label].idxmax()] 

    max_1_row=max_1_row.loc[raw_prob.groupby(raw_prob['id'].str.split('_').str[3])['p_1_'+label].idxmax()] 

    max_1_row=max_1_row.loc[raw_prob.groupby(raw_prob['id'].str.split('_').str[5])['p_1_'+label].idxmax()] 

Irgendwelche Ideen?

+0

Sie wollen also als Ergebnis: 0,9851951 und 0,9996491? – Joe

+0

Ja, diese Werte sind das Ergebnis nur für die ersten 14 Zeilen. Ich brauche die Ergebnisse für jede 14 Zeilen – Ben

Antwort

2

Ich glaube, Sie DataFrameGroupBy.idxmax ersetzt letzte _ mit leeren String benötigen, und wählen Sie dann durch loc:

df = pd.read_csv('myProb.csv', index_col=[0]) 

idx = df.drop('id', 1).groupby(df['id'].str.replace('_\d+$', '')).idxmax() 
print (idx.head(15)) 
           p_0_logreg p_1_logreg p_2_logreg 
id                
6_PanaCleanerJune_sub_12_ICA   2   9   6 
6_PanaCleanerJune_sub_13_ICA   17   19   23 
6_PanaCleanerJune_sub_14_ICA   34   37   33 
6_PanaCleanerJune_sub_15_ICA   52   51   43 
6_PanaCleanerJune_sub_17_ICA   66   67   69 
6_PanaCleanerJune_sub_18_ICA   82   79   76 
6_PanaCleanerJune_sub_19_ICA   89   87   90 
6_PanaCleanerJune_sub_20_ICA   98   103   104 
6_PanaCleanerJune_sub_21_ICA   114   117   112 
6_PanaCleanerJune_sub_22_ICA   129   133   127 
6_PanaCleanerJune_sub_23_ICA   145   146   143 
6_PanaCleanerJune_sub_24_ICA   155   166   161 
6_PanaCleanerJune_sub_25_ICA   176   173   174 
6_PanaCleanerJune_sub_26_ICA   186   191   189 
6_PanaCleanerJune_sub_27_ICA   202   203   209 

df1 = df.loc[idx['p_1_logreg']] 
print (df1.head(15)) 
            id p_0_logreg p_1_logreg p_2_logreg 
9 6_PanaCleanerJune_sub_12_ICA_10 0.013452 0.985195 0.001353 
19 6_PanaCleanerJune_sub_13_ICA_6 0.051184 0.948816 0.000000 
37 6_PanaCleanerJune_sub_14_ICA_10 0.013758 0.979351 0.006890 
51 6_PanaCleanerJune_sub_15_ICA_10 0.076056 0.923944 0.000000 
67 6_PanaCleanerJune_sub_17_ICA_12 0.051060 0.947660 0.001280 
79 6_PanaCleanerJune_sub_18_ICA_10 0.051184 0.948816 0.000000 
87 6_PanaCleanerJune_sub_19_ICA_4 0.078162 0.917751 0.004087 
103 6_PanaCleanerJune_sub_20_ICA_6 0.076400 0.921263 0.002337 
117 6_PanaCleanerJune_sub_21_ICA_6 0.155002 0.791753 0.053245 
133 6_PanaCleanerJune_sub_22_ICA_8 0.000000 0.998623 0.001377 
146 6_PanaCleanerJune_sub_23_ICA_7 0.017549 0.973995 0.008457 
166 6_PanaCleanerJune_sub_24_ICA_13 0.025215 0.974785 0.000000 
173 6_PanaCleanerJune_sub_25_ICA_6 0.025656 0.960220 0.014124 
191 6_PanaCleanerJune_sub_26_ICA_10 0.098872 0.895526 0.005602 
203 6_PanaCleanerJune_sub_27_ICA_8 0.066493 0.932470 0.001037 

df2 = df.loc[idx['p_2_logreg']] 
print (df2.head(15)) 
            id p_0_logreg p_1_logreg p_2_logreg 
6  6_PanaCleanerJune_sub_12_ICA_7 0.000000 0.000351 0.999649 
23 6_PanaCleanerJune_sub_13_ICA_10 0.000000 0.000351 0.999649 
33 6_PanaCleanerJune_sub_14_ICA_6 0.080748 0.000352 0.918900 
43 6_PanaCleanerJune_sub_15_ICA_2 0.017643 0.000360 0.981996 
69 6_PanaCleanerJune_sub_17_ICA_14 0.882449 0.000290 0.117261 
76 6_PanaCleanerJune_sub_18_ICA_7 0.010929 0.000360 0.988711 
90 6_PanaCleanerJune_sub_19_ICA_7 0.010929 0.000351 0.988720 
104 6_PanaCleanerJune_sub_20_ICA_7 0.006714 0.000360 0.992925 
112 6_PanaCleanerJune_sub_21_ICA_1 0.869393 0.000339 0.130269 
127 6_PanaCleanerJune_sub_22_ICA_2 0.000000 0.000351 0.999649 
143 6_PanaCleanerJune_sub_23_ICA_4 0.017218 0.000360 0.982421 
161 6_PanaCleanerJune_sub_24_ICA_8 0.369685 0.000712 0.629603 
174 6_PanaCleanerJune_sub_25_ICA_7 0.307056 0.000496 0.692448 
189 6_PanaCleanerJune_sub_26_ICA_8 0.850195 0.000368 0.149437 
209 6_PanaCleanerJune_sub_27_ICA_14 0.000000 0.000351 0.999649 

Detail:

print (df['id'].str.replace('_\d+$', '').head(15)) 
0  6_PanaCleanerJune_sub_12_ICA 
1  6_PanaCleanerJune_sub_12_ICA 
2  6_PanaCleanerJune_sub_12_ICA 
3  6_PanaCleanerJune_sub_12_ICA 
4  6_PanaCleanerJune_sub_12_ICA 
5  6_PanaCleanerJune_sub_12_ICA 
6  6_PanaCleanerJune_sub_12_ICA 
7  6_PanaCleanerJune_sub_12_ICA 
8  6_PanaCleanerJune_sub_12_ICA 
9  6_PanaCleanerJune_sub_12_ICA 
10 6_PanaCleanerJune_sub_12_ICA 
11 6_PanaCleanerJune_sub_12_ICA 
12 6_PanaCleanerJune_sub_12_ICA 
13 6_PanaCleanerJune_sub_12_ICA 
14 6_PanaCleanerJune_sub_13_ICA 
Name: id, dtype: object 
+0

Danke. Meine erwartete Ausgabe sind die Zeilen, in denen das Maximum liegt. Das bedeutet, dass ich für jeden Satz von 14 Zeilen die Zeile mit P1 als Maximum und die Zeile mit P2 als Maximum angeben muss. – Ben

+0

Auch ich brauche die Nummer nach ICA – Ben

+0

Ja, es ist in 'df1' und' df2'. – jezrael