在第二列中的每个匹配项的一个数据帧列中查找索引

2024-04-26 02:19:04 发布

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

我有一个这样的数据框:

enter image description here

我想为每一行在current列中查找当前行的previous值之间的匹配索引,这样我就得到了一个名为idx_previous的新序列,如下所示:

enter image description here

到目前为止,我已经尝试使用Pandas.Series.where()函数查看位置。如果我这样做:

import pandas as pd
df = pd.DataFrame({'current':['a','aa','ab','aaa','aab','aba','abb'],
    'previous':['','a','a','aa','aa','ab','ab']})

df['idx_previous'] = ''
for previous in df.previous[1:]:
    df.loc[df.previous==previous, 'idx_previous'] = df.loc[df.current == 
previous].index[0]

我可以得到我想要的,但这似乎是一个不优雅的解决办法。是否有更适合此任务的方法?谢谢

注意:previous根据定义是current到元素N-1的字符串。并且current由所有唯一值组成


Tags: 数据函数importpandasdfab序列current
1条回答
网友
1楼 · 发布于 2024-04-26 02:19:04

您可以创建一个系列s,它反转df['current']的映射。然后将其与pd.Series.map一起使用:

s = pd.Series(df.index, index=df['current'].values)
df['idx_previous'] = df['previous'].map(s)

print(df)

  current previous  idx_previous
0       a                    NaN
1      aa        a           0.0
2      ab        a           0.0
3     aaa       aa           1.0
4     aab       aa           1.0
5     aba       ab           2.0
6     abb       ab           2.0

此解决方案依赖于df['current']的值是唯一的,否则您的需求是不明确的。此外,由于NaN是一个float值,因此,非映射值(例如第一行)的存在导致NaN并强制df['idx_previous']向上转换为float

相关问题 更多 >