Mam następującą ramkę danych:

df:

Unnamed: 0          0          1
0          0.0   0.000000        NaN
1          1.0   2.236068   0.000000
2          2.0   3.000000   2.236068
3          NaN   0.000000   1.000000
4          0.0   0.000000        NaN
5          1.0   1.414214   0.000000
6          2.0   2.828427   1.414214
7          NaN   0.000000   1.000000
8          0.0   0.000000        NaN
9          1.0   3.162278   0.000000
10         2.0  11.401754   3.162278
11         NaN   0.000000   1.000000
12         0.0   0.000000        NaN
13         1.0  14.142136   0.000000
14         2.0   2.828427  14.142136

Próbuję uzyskać wartość maksymalną z każdego zestawu danych , problemem jest to, że generowany ten dataframe z kilku operacji , ale na koniec indeksy i nagłówki są liczbami i nie mogę używać groupby lub { { X1}} To, czego potrzebuję, to coś w następujący sposób:

df1
        0
 1   3.000000
 2   2.828427
 3  11.401754
 4  14.142136
1
Jonathan Pacheco 27 czerwiec 2017, 03:14

3 odpowiedzi

Najlepsza odpowiedź

Użyj .iloc i cumsum:

df.groupby((~df.iloc[:,0].astype(bool)).cumsum()).max()

Wynik:

            Unnamed: 0          0          1
Unnamed: 0                                  
1                  2.0   3.000000   2.236068
2                  2.0   2.828427   1.414214
3                  2.0  11.401754   3.162278
4                  2.0  14.142136  14.142136

Aby uzyskać maksymalne wskaźnik kolumny 1:

df.groupby((~df.iloc[:,0].astype(bool)).cumsum()).max().iloc[:,1]

Wynik:

Unnamed: 0
1     3.000000
2     2.828427
3    11.401754
4    14.142136
Name: 0, dtype: float64
1
Scott Boston 27 czerwiec 2017, 04:32

file.csv :

0,1,2,3
9,6,7,
0,,,
5,6,2

Próbować:

import pandas as pd

df = pd.read_csv('file.csv', header=-1)
# keep only max per row
print(df.max(axis=1))

Wynik:

0    3.0
1    9.0
2    0.0
3    6.0
dtype: float64
0
glegoux 27 czerwiec 2017, 01:04

Absolutnie użyjesz loc! Problem polega na tym, że nie zwracasz uwagi na to, czy df.columns są liczbami całkowitymi lub ciągami. Odkąd masz problemy, zgaduję sznurki.

Jednak to, co próbujesz zrobić, nie jest jasne

IIUC

m = df['0'] == 0
g = m.cumsum()[~m]
df.loc[~m, '0'].groupby(g).max()
2
piRSquared 27 czerwiec 2017, 01:02