Próbuję uzyskać dostęp do indeksu wiersza w funkcji stosowanej w całej DataFrame
Pandas. Mam coś takiego:
df = pandas.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'])
>>> df
a b c
0 1 2 3
1 4 5 6
i zdefiniuję funkcję, która ma dostęp do elementów z podanym wierszem
def rowFunc(row):
return row['a'] + row['b'] * row['c']
Mogę to zastosować w ten sposób:
df['d'] = df.apply(rowFunc, axis=1)
>>> df
a b c d
0 1 2 3 7
1 4 5 6 34
Niesamowite! A co, jeśli chcę włączyć indeks do mojej funkcji? Indeks każdego wiersza w tym DataFrame
przed dodaniem d
byłby Index([u'a', u'b', u'c', u'd'], dtype='object')
, ale chcę 0 i 1. Więc nie mogę po prostu uzyskać dostępu row.index
.
Wiem, że mógłbym utworzyć tymczasową kolumnę w tabeli, w której przechowuję indeks, ale zastanawiam się, czy jest ona gdzieś przechowywana w obiekcie wiersza.
apply
? Jest to znacznie wolniejsze niż wykonywanie wektoryzowanych operacji na samej ramie. (Czasami zastosowanie jest najprostszym sposobem zrobienia czegoś, a względy wydajności są często wyolbrzymione, ale w twoim konkretnym przykładzie równie łatwo jest tego nie używać.)