2017-09-14 72 views
1

查找數據幀中的每個列的最後一個位置,我已經做了一些搜索來回答這個問題,但我無法弄清楚如何做到這一點:由熊貓

我有一個包含185行的數據集和30列。並非所有的行都有價值。我想查找每列的最後一個值的位置並獲取該列的索引。我不知道如何做到這一點的操作,當我用下面的代碼它給我的數據幀的長度不只是列:

len(data_exam['col']) 

我將不勝感激任何建議。

另外我想確保如果我想要讀取循環中的所有列,我的下面的代碼是不是一個好的選擇! :

list=[] 
for col in data: 
    function which find the length of column 

謝謝。

+0

你能否解釋一下 「不是所有的行具有價值。」這是否意味着您尋找的價值之後,所有東西都是空白的?也請張貼樣本/可複製的數據。 –

+0

所以,要清楚的是,如果你有10列,第一行只有前5列的值,你會想要第五列的索引? –

回答

2

可以使用last_valid_index找到給定列中最後一個有效值的索引位置。還有一對雙人間,first_valid_index

# Set-up sample data. 
np.random.seed(0) 
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC')) 

df.iloc[2:, 0] = np.nan 
df.iloc[4:, 1] = np.nan 
>>> df 
      A   B   C 
0 1.764052 0.400157 0.978738 
1 2.240893 1.867558 -0.977278 
2  NaN -0.151357 -0.103219 
3  NaN 0.144044 1.454274 
4  NaN  NaN 0.443863 

# Solution to find index of last valid values per column. 
>>> df.apply(lambda series: series.last_valid_index()) 
A 1 # <== Index of last valid data in column A. 
B 3 # <== Index of last valid data in column B. 
C 4 # <== Index of last valid data in column C. 
dtype: int64 
2

IIUC,你想在每列中的最後一個非楠的價值:

df[::-1].bfill().iloc[0] 

例子:

df = pd.DataFrame({'A':[1,2,3,4,np.nan],'B':[1,np.nan,np.nan,np.nan,np.nan],'C':[1,2,3,4,5]}) 

    A B C 
0 1.0 1.0 1 
1 2.0 NaN 2 
2 3.0 NaN 3 
3 4.0 NaN 4 
4 NaN NaN 5 

輸出:

A 4.0 
B 1.0 
C 5.0 
Name: 4, dtype: float64 
+0

OP要求查找最後一個值的索引。 _「我想查找每列上的最後一個值的位置並獲取該列的索引。」_應該可以讀取「該值的索引」。 – Alexander

2
df.reset_index().melt('index').dropna().groupby('variable')['index'].max() 
Out[487]: 
variable 
A 3 
B 0 
C 4 
Name: index, dtype: int64 
+1

您應該使用'last()'而不是'max()'來泛化其他索引(例如,如果索引被逆轉,這將失敗)。另外,使用「熔體」會顯着降低性能。 – Alexander

+0

@Alexander是的你是對的;-) – Wen