python – Pandas:查找上一行匹配值
发布时间:2020-05-25 20:17:10 所属栏目: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 c0 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()不是真的.有什么想法吗? 解决方法我们可以按列进行分组,默认情况下会对值进行排序,然后“附加” 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 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
