python - Pandas 基于另一列的条件移位
问题描述
我有一个简单的人员和价值数据框。我想添加一个返回用户下一个值的列。使用 a 很容易做到这一点shift(-1)
,但如果人员发生变化,我希望新列为空值。我可以遍历行,但这似乎是一个缓慢的选择。
原始数据框:
import pandas as pd
df = pd.DataFrame(data=[['A', 1], ['A', 4],
['B', 1], ['B', 4]],
columns=['person', 'val'])
person val
0 A 1
1 A 4
2 B 1
3 B 4
期望的输出:
person val conditional shift
0 A 1 4.0
1 A 4 NaN
2 B 1 6.0
3 B 6 NaN
解决方案
看起来你想要GroupBy.shift
:
df['conditional shift'] = df.groupby('person').val.shift(-1)
print(df)
person val conditional shift
0 A 1 4.0
1 A 4 NaN
2 B 1 6.0
3 B 6 NaN
推荐阅读
- c# - 如何搜索在 MVC EF 中工作的 int 条目?
- javascript - 在 ExtJS 3.4 中更改工具的持续时间
- nightmare - Nightmarejs 不在服务器上呈现 javascript
- tree - 在 Lisp 中逐级遍历树(广度优先)
- npm - NPM 挂起并卡在发布/打包上
- google-analytics - 谷歌分析服务器端归因和 gclid,它是如何工作的?
- python - 错误处理问题,似乎无法识别错误
- java - 在向用户显示随机对象时使用访问器方法?
- r - 有效地组合跨越相同范围的多个 irange(保留 mcols)
- javascript - 使用自动播放来播放使用 HTML5 音频的广播电台