【问题标题】:Scan table to find certain value in column, then return previous values of another column Python [closed]扫描表以查找列中的某个值,然后返回另一列 Python 的先前值 [关闭]
【发布时间】:2018-06-07 09:01:11
【问题描述】:

使用 python,从这样的表中:

A  B  C
0  1  5
1  1  8
2  1  5
3  1  4
4  1  5
5  5  10
6  5  9
7  1  5
8  1  4
9  1  5
10 5  4

如何创建一个函数来扫描以查找所有“B”值 = 5,然后返回前 4 个“C”值,其中“B” = 1?如果只有 3 个 ‘B’ = 1,则返回 3。

在第一个 'B' = 5 之后,我需要输出 8、5、4、5。第二个 'B' = 5 应该什么都不返回,因为它前面没有任何 'B' = 1 .第三个 ‘B’ = 5 需要返回 5, 4, 5。这应该被写入一个全新的数据集中,每个新的 ‘B’ = 5 值之间都有一个空格,如下所示:

8
5
4
5

5
4
5

【问题讨论】:

  • 请发布您想要的数据集
  • 我对这里的逻辑感到非常困惑。这是全 ONE 功能吗? 8545 的输出是从哪里来的?
  • 如果答案有帮助,请将其标记为已接受。 stackoverflow.com/help/someone-answers点击答案旁边的灰色勾号将其变为绿色。

标签: python pandas


【解决方案1】:

选项 1
loc + groupby + tail -

i = df.B.eq(5).cumsum()
df.loc[df.B == 1, 'C'].groupby(i, group_keys=False).tail(4)

1    8
2    5
3    4
4    5
7    5
8    4
9    5
Name: C, dtype: int64

选项 2
groupby + apply

v = df.B.groupby(i, group_keys=False).apply(lambda x: x[x == 1].iloc[-4:]).index    
df.loc[v, 'C']

1    8
2    5
3    4
4    5
7    5
8    4
9    5
Name: C, dtype: int64

【讨论】:

  • 我希望你不介意表面上的改变...... ;-)
猜你喜欢
  • 2016-02-25
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 2021-09-12
  • 2013-05-26
  • 1970-01-01
相关资源
最近更新 更多