我有一个这样的数据框:
我想为每一行在current
列中查找当前行的previous
值之间的匹配索引,这样我就得到了一个名为idx_previous
的新序列,如下所示:
到目前为止,我已经尝试使用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
由所有唯一值组成
您可以创建一个系列
s
,它反转df['current']
的映射。然后将其与pd.Series.map
一起使用:此解决方案依赖于
df['current']
的值是唯一的,否则您的需求是不明确的。此外,由于NaN
是一个float
值,因此,非映射值(例如第一行)的存在导致NaN
并强制df['idx_previous']
向上转换为float
相关问题 更多 >
编程相关推荐