Tôi có một DataFrame pandas Python trong đó mỗi phần tử là một float hoặc NaN. Đối với mỗi hàng, tôi sẽ cần phải tìm cột chứa số thứ n của hàng. Tức là, tôi cần lấy cột giữ phần tử thứ n của hàng không phải là NaN. Tôi biết rằng cột thứ n như vậy luôn luôn tồn tại.Đối với mỗi hàng, cách nhanh nhất để tìm cột giữ phần tử thứ n không phải là NaN?
Vì vậy, nếu n là 4 và một dataframe gấu trúc được gọi là myDF là như sau:
10 20 30 40 50 60 70 80 90 100
'A' 4.5 5.5 2.5 NaN NaN 2.9 NaN NaN 1.1 1.8
'B' 4.7 4.1 NaN NaN NaN 2.0 1.2 NaN NaN NaN
'C' NaN NaN NaN NaN NaN 1.9 9.2 NaN 4.4 2.1
'D' 1.1 2.2 3.5 3.4 4.5 NaN NaN NaN 1.9 5.5
tôi muốn để có được:
'A' 60
'B' 70
'C' 100
'D' 40
tôi có thể làm:
import pandas as pd
import math
n = some arbitrary int
for row in myDF.indexes:
num_not_NaN = 0
for c in myDF.columns:
if math.isnan(myDF[c][row]) == False:
num_not_NaN +=1
if num_not_NaN==n:
print row, c
break
Tôi chắc rằng điều này rất chậm và không phải là rất Pythonic. Có cách tiếp cận nào sẽ nhanh hơn nếu tôi đang xử lý một DataFrame rất lớn và các giá trị lớn của n?
Cảm ơn rất nhiều. Điều này sẽ tăng tốc độ cho tôi rất nhiều. –