2015-11-21 14 views
5

Say mam następujący dataframe:Wykonywanie funkcji w par wierszy pandy dataframe

>>> df=pd.DataFrame(data=['A','B','C','D','E'], columns=['Name']) 
>>> df 
    Name 
0 A 
1 B 
2 C 
3 D 
4 E 
>>> 

Chcę utworzyć listę wartości dla sąsiednich rzędach w dataframe. Jeśli utworzę indeks pary, mogę uzyskać ten wynik za pomocą grupy:

>>> df.index=[0,0,1,1,2] 
>>> df.groupby(level=0).agg(lambda x: list(x)) 
    Name 
0 [A, B] 
1 [C, D] 
2  [E] 

Jaki jest najskuteczniejszy sposób robienia tego?

+0

najbardziej efektywny sposób, aby "Chcę utworzyć listę wartości sąsiednich wierszy w ramce danych." nie rób tego. Zachowaj to jako df i rób to, co musisz. Zobacz także [XY-problem] (http://meta.stackexchange.com/q/66377/184179). –

+0

Tak, to jest problem, który tworzę listy w mojej ramce danych lub że stosuję funkcję do sąsiednich wierszy? Po prostu użyłem funkcji listy arbitralnie w tym przykładzie i jestem bardziej zainteresowany ogólnie w jaki sposób zastosować funkcję do sąsiednich rzędów. – AJG519

+0

Możesz napisać własną funkcję, która akceptuje subdataframe w groupby ... jaką funkcję chcesz zastosować? Lub jest pytanie, jak grupować przyległość? –

Odpowiedz

4

Można GroupBy przez "sąsiedztwa" w jednej porcji (bez mutowania DataFrame):

In [11]: g = df.groupby(df.index // 2) 

a następnie zrobić cokolwiek to trzeba zrobić:

In [12]: g.get_group(0) 
Out[12]: 
    Name 
0 A 
1 B 

In [13]: g.sum() 
Out[13]: 
    Name 
0 AB 
1 CD 
2 E