2016-10-17 3 views
0

Ich versuche, eine Spalte aus einem DataFrame zu generieren, um meine Gruppierung zu basieren. Ich weiß, dass jede NaN-Säule unter einer Nicht-NaN-Säule zu derselben Gruppe gehört. Also habe ich diese Schleife geschrieben (siehe unten), aber ich habe mich gefragt, ob es eine pandas/pythonische Art gibt, sie mit apply oder einer Verständnisliste zu schreiben.Hinzufügen einer Spalte, die für jeden Index inkrementiert, der ein Kriterium in einer anderen Spalte erfüllt

import pandas 

>>> DF = pandas.DataFrame([134, None, None, None, 129374, None, None, 12, None], 
         columns=['Val']) 
>>> a = [0] 
>>> for i in DF['Val']: 
     if i > 1: 
      a.append(a[-1] + 1) 
     else: 
      a.append(a[-1]) 
>>> a.pop(0) # remove 1st 0 which does not correspond to any rows 
>>> DF['Group'] = a 
>>> DF 
     Val Group 
0  134.0  1 
1  NaN  1 
2  NaN  1 
3  NaN  1 
4 129374.0  2 
5  NaN  2 
6  NaN  2 
7  12.0  3 
8  NaN  3 

Antwort

2

Verwenden pd.notnull Nicht-NaN-Werte zu identifizieren. Dann cumsum verwenden, um die Group Spalte zu erstellen:

import pandas as pd 

df = pd.DataFrame([134, None, None, None, 129374, None, None, 12, None], 
        columns=['Val']) 
df['Group'] = pd.notnull(df['Val']).cumsum() 
print(df) 

ergibt

 Val Group 
0  134.0  1 
1  NaN  1 
2  NaN  1 
3  NaN  1 
4 129374.0  2 
5  NaN  2 
6  NaN  2 
7  12.0  3 
8  NaN  3 
Verwandte Themen