Pandas:如何在一系列列中找到第一个有效列

2024-09-23 14:26:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在熊猫数据框中的比赛不同部分的数据集,我需要从中计算某些特征。看起来像这样:

id         distance     timeto1000m    timeto800m    timeto600m   timeto400m   timeto200m    timetoFinish
1          1400m        10             21            30           39           50            60    
2          1200m        0              19            31           42           49            57   
3          1800m        0              0             0            38           49            62   
4          1000m        0              0             29           40           48            61

所以,我需要为每一行找到第一个非零的timetoXXm列和相应的距离XX。例如,对于id=1这将是1000米,对于{}这将是400米等等

我可以使用一系列if..elif..else条件来完成这项工作,但是我想知道在pandas/numpy中是否有更好的方法来进行这种查找?在


Tags: 数据id距离if特征distancexxelif
2条回答

使用idxmax(1)

df.set_index(['id', 'distance']).ne(0).idxmax(1)

id  distance
1   1400m       timeto1000m
2   1200m        timeto800m
3   1800m        timeto400m
4   1000m        timeto600m
dtype: object

可以这样做,首先过滤感兴趣的列并进行切片,然后对感兴趣的列调用^{}以返回满足布尔条件的列:

In [11]:
df_slice = df.ix[:,df.columns.str.startswith('time')]
df_slice[df_slice!=0].idxmin(axis=1)

Out[11]:
0    timeto1000m
1     timeto800m
2     timeto400m
3     timeto600m
dtype: object

In [15]:
df['first_valid'] = df_slice[df_slice!=0].idxmin(axis=1)
df[['id','first_valid']]

Out[15]:
   id  first_valid
0   1  timeto1000m
1   2   timeto800m
2   3   timeto400m
3   4   timeto600m

相关问题 更多 >