python - Pandas :找到匹配值的前一行

标签 python pandas

我正在尝试使用一列中的值创建一列,但基于另一列与先前值的匹配。

这是我当前的代码:

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

最佳答案

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

关于python - Pandas :找到匹配值的前一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42446006/

相关文章:

python - Pandas - 提取唯一的列组合并在另一个表中对它们进行计数

python-3.x - 如何使用存储在 csv 中的情绪分析数据的 Pandas 绘制多折线图

python - Pandas:选择两个日期之间的 DataFrame 行(日期时间索引)

python - 为 Google Ajax 搜索准备字符串?

python - 使用 Python for Facebook 进行搜索

python - Pandas - 旋转、堆叠、取消堆叠?

python - 如何使用相同的索引分割 pandas 数据框

python - 我正在尝试使用 python 实现 strassen 的算法,但出现错误

python - 递归无法追加列表

python - 素数与 python