加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:01:14 所属栏目:Python 来源:网络整理
导读:我正在尝试使用一列中的值创建一个列,但是基于将另一列与前一个值匹配. 这是我目前的代码: 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 c0 1 10 NaN1 2 20
我正在尝试使用一列中的值创建一个列,但是基于将另一列与前一个值匹配.

这是我目前的代码:

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()不是真的.有什么想法吗?

解决方法

我们可以按列进行分组,默认情况下会对值进行排序,然后“附加” shifted b列:
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读