Tôi đang cố gắng truy cập chỉ mục của một hàng trong một hàm được áp dụng trên toàn bộ DataFrame
trong Pandas. Tôi có một cái gì đó như thế này:lấy chỉ mục của một hàng trong gấu trúc áp dụng hàm
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
và tôi sẽ định nghĩa một hàm truy cập vào các yếu tố với một hàng cho
def rowFunc(row):
return row['a'] + row['b'] * row['c']
tôi có thể áp dụng nó như vậy:
df['d'] = df.apply(rowFunc, axis=1)
>>> df
a b c d
0 1 2 3 7
1 4 5 6 34
Awesome! Bây giờ nếu tôi muốn kết hợp chỉ mục vào chức năng của mình thì sao? Chỉ mục của bất kỳ hàng cụ thể nào trong số DataFrame
trước khi thêm d
sẽ là Index([u'a', u'b', u'c', u'd'], dtype='object')
, nhưng tôi muốn 0 và 1. Vì vậy, tôi không thể truy cập row.index
.
Tôi biết tôi có thể tạo ra một cột tạm thời trong bảng nơi tôi lưu trữ các chỉ số, nhưng tôi "tự hỏi nếu nó được sotred trong đối tượng hàng ở đâu đó.
Bên cạnh: là có một lý do bạn cần phải sử dụng 'apply'? Đó là chậm hơn nhiều so với thực hiện ops vectorized trên khung chính nó. (Đôi khi áp dụng * là * cách đơn giản nhất để làm điều gì đó và cân nhắc hiệu suất thường được phóng đại, nhưng đối với ví dụ cụ thể của bạn thì dễ dàng * không * để sử dụng nó.) – DSM
@ DSM trong thực tế Tôi đang gọi một hàm tạo đối tượng khác cho mỗi hàng sử dụng các yếu tố hàng khác nhau. Tôi chỉ muốn đặt một ví dụ tối thiểu với nhau để minh họa cho câu hỏi. – Mike
'apply()' không phải là droid bạn đang tìm kiếm; sử dụng 'df.iterrows()' để thay thế. Xem câu trả lời của tôi. Đây là loại vấn đề XY – smci