您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – Pandas:查找上一行匹配值

5b51 2022/1/14 8:22:15 python 字数 1589 阅读 535 来源 www.jb51.cc/python

我正在尝试使用一列中的值创建一个列,但是基于将另一列与前一个值匹配. 这是我目前的代码: d = {'a':[1,2,3,1,2,3,2,1], 'b':[10,20,30,40,50,60,70,80]} df = pd.DataFrame(d) df['c'] = df['b'][df['a'] == df['a'].prev()] 我想要的输出: a b c 0 1 10

概述

这是我目前的代码

d = {'a':[1,2,3,1,1],'b':[10,20,30,40,50,60,70,80]}

df = pd.DataFrame(d)

df['c'] = df['b'][df['a'] == df['a'].prev()]

我想要的输出

a   b    c
0  1  10  NaN
1  2  20  NaN
2  3  30  NaN
3  1  40   10
4  2  50   20
5  3  60   30
6  2  70   50
7  1  80   40

…我没有得到因为.prev()不是真的.有什么想法吗?

In [110]: df['c'] = df.groupby('a')['b'].transform(lambda x: x.shift())

In [111]: df
Out[111]:
   a   b     c
0  1  10   NaN
1  2  20   NaN
2  3  30   NaN
3  1  40  10.0
4  2  50  20.0
5  3  60  30.0
6  2  70  50.0
7  1  80  40.0

或者更好的选择 – 使用GroupBy.shift()(谢谢@Mitch)

In [114]: df['c'] = df.groupby('a')['b'].shift()

In [115]: df
Out[115]:
   a   b     c
0  1  10   NaN
1  2  20   NaN
2  3  30   NaN
3  1  40  10.0
4  2  50  20.0
5  3  60  30.0
6  2  70  50.0
7  1  80  40.0

总结

以上是编程之家为你收集整理的python – Pandas:查找上一行匹配值全部内容,希望文章能够帮你解决python – Pandas:查找上一行匹配值所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶