我正在尝试使用一列中的值创建一个列,但是基于将另一列与前一个值匹配.
这是我目前的代码:
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()]
Run Code Online (Sandbox Code Playgroud)
我想要的输出:
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
Run Code Online (Sandbox Code Playgroud)
......我没有得到,因为.prev()这不是真的.有什么想法吗?
我们可以按a列分组,默认情况下会对值进行排序,然后"附加" 移位 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
Run Code Online (Sandbox Code Playgroud)
或者更好的选择 - using 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2158 次 |
| 最近记录: |