pandas后几行_如何使用pandas获取每行中的最后n个值

这篇博客介绍了如何在pandas DataFrame中获取每行的最后n个非缺失值。通过numpy的justify函数和循环处理两种方法,可以有效地处理含有缺失值的数据行,提取出每行尾部的特定数量的有效数值。
摘要由CSDN通过智能技术生成

解决方案,如果每行都有更多非缺失行,如阈值:

使用numpy与justify功能:

df['res1'] = justify(df.iloc[:, :-1].values, invalid_val=np.nan, side='right')[:, -3:].tolist()

print (df)

col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 \

0 NaN NaN 23.0 23 23.0 NaN 23.0 23.0 123.0 NaN NaN

1 NaN NaN NaN 45 12.0 23.0 23.0 NaN NaN NaN NaN

2 45.0 56.0 34.0 23 323.0 12.0 NaN NaN NaN NaN NaN

3 NaN NaN 34.0 65 NaN 65.0 2343.0 NaN NaN 2344.0 2.0

4 NaN NaN NaN 5 675.0 34.0 34.0 34.0 NaN NaN NaN

5 34.0 45.0 45.0 45 NaN NaN NaN NaN NaN NaN NaN

col12 col13 I res1

0 NaN NaN r1 [23.0, 23.0, 123.0]

1 NaN NaN r2 [12.0, 23.0, 23.0]

2 NaN NaN r3 [23.0, 323.0, 12.0]

3 324.0 234.0 r4 [2.0, 324.0, 234.0]

4 NaN NaN r5 [34.0, 34.0, 34.0]

5 NaN NaN r6 [45.0, 45.0, 45.0]

如果没有,需要循环:

#changed a bit https://stackoverflow.com/a/40835254

def loop_compr_based(a, last):

mask = ~np.isnan(a)

stop = mask.sum(1).cumsum()

start = np.append(0,stop[:-1])

am = a[mask].tolist()

out = np.array([am[start[i]:stop[i]][-last:] for i in range(len(start))])

return out

df['res1'] = loop_compr_based(df.iloc[:, :-1].values, 5).tolist()

print (df)

col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 \

0 NaN NaN 23.0 23 23.0 NaN 23.0 23.0 123.0 NaN NaN

1 NaN NaN NaN 45 12.0 23.0 23.0 NaN NaN NaN NaN

2 45.0 56.0 34.0 23 323.0 12.0 NaN NaN NaN NaN NaN

3 NaN NaN 34.0 65 NaN 65.0 2343.0 NaN NaN 2344.0 2.0

4 NaN NaN NaN 5 675.0 34.0 34.0 34.0 NaN NaN NaN

5 34.0 45.0 45.0 45 NaN NaN NaN NaN NaN NaN NaN

col12 col13 I res1

0 NaN NaN r1 [23.0, 23.0, 23.0, 23.0, 123.0]

1 NaN NaN r2 [45.0, 12.0, 23.0, 23.0]

2 NaN NaN r3 [56.0, 34.0, 23.0, 323.0, 12.0]

3 324.0 234.0 r4 [2343.0, 2344.0, 2.0, 324.0, 234.0]

4 NaN NaN r5 [5.0, 675.0, 34.0, 34.0, 34.0]

5 NaN NaN r6 [34.0, 45.0, 45.0, 45.0]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值