我已经做了一些搜索来回答这个问题,但我无法弄清楚如何做到这一点:
我有一个包含185行和30列的数据集。并非所有行都有价值。我想查找每列上最后一个值的位置,并获取该列的索引。我不知道如何执行此操作,因为当我使用下面的代码时,它给出了数据框的长度而不仅仅是该列:
len(data_exam['col'])
我很感激任何建议。
另外,我想确保如果我想读取循环中的所有列,我的下列代码是否是一个不错的选择! :
list=[]
for col in data:
function which find the length of column
感谢。
答案 0 :(得分:3)
您可以使用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
答案 1 :(得分: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
答案 2 :(得分:2)
df.reset_index().melt('index').dropna().groupby('variable')['index'].max()
Out[487]:
variable
A 3
B 0
C 4
Name: index, dtype: int64