python - 值和后续行上的子集 df - pandas
问题描述
我知道这是在 S0 的某个地方,但我似乎找不到它。我想对特定值的 df 进行子集化,并包含以下唯一行。使用下面,我可以返回等于 的值A
,但我希望返回下一个唯一值,即B
.
注意:后续唯一值可能不是B
或可能有不同的行,因此我需要一个函数来查找返回所有后续唯一值。
import pandas as pd
df = pd.DataFrame({
'Time' : [1,1,1,1,1,1,2,2,2,2,2,2],
'ID' : ['A','A','B','B','C','C','A','A','B','B','C','C'],
'Val' : [2.0,5.0,2.5,2.0,2.0,1.0,1.0,6.0,4.0,2.0,5.0,1.0],
})
df = df[df['ID'] == 'A']
预期输出:
Time ID Val
0 1 A 2.0
1 1 A 5.0
2 1 B 2.5
3 1 B 2.0
4 2 A 1.0
5 2 A 6.0
6 2 B 4.0
7 2 B 2.0
解决方案
好的 OP 让我再做一次,你想找到所有“A”行(基本条件)和所有在某个时间点跟随“A”行的行,对吧?
然后,
is_A = df["ID"] == "A"
not_A_follows_from_A = (df["ID"] != "A") &( df["ID"].shift() == "A")
candidates = df["ID"].loc[is_A | not_A_follows_from_A].unique()
df.loc[df["ID"].isin(candidates)]
应该按预期工作。
编辑:示例
df = pd.DataFrame({
'Time': [1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1],
'ID': ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'A', 'E', 'E', 'E', 'A', 'F'],
'Val': [7, 2, 7, 5, 1, 6, 7, 3, 2, 4, 7, 8, 2]})
is_A = df["ID"] == "A"
not_A_follows_from_A = (df["ID"] != "A") &( df["ID"].shift() == "A")
candidates = df["ID"].loc[is_A | not_A_follows_from_A].unique()
df.loc[df["ID"].isin(candidates)]
输出这个:
Time ID Val
0 1 A 7
1 1 A 2
2 1 B 7
3 0 B 5
7 1 A 3
8 0 E 2
9 0 E 4
10 1 E 7
11 1 A 8
12 1 F 2
推荐阅读
- c++ - 按位移位以查找内存地址的一部分
- r - 需要帮助使用 r 中的 cut 命令手动设置中断
- python-3.x - 尝试使用火花数据框创建相关矩阵
- reactjs - ComponentDidUpdate 导致带有 Ajax 请求的无限循环
- python - TensorFlow Mask_RCNN InvalidArgumentError
- node.js - 如何跳过或跳转 mongo 集合中的参数/键?
- reactjs - 如何处理两个 useEffect 挂钩,其中一个 useEffect 依赖项影响另一个 useEffect 依赖项?
- php - 从 Laravel 8 工厂访问模型方法 - ErrorException: Attempt to read property on null
- c - 为什么这个“for循环”有效而不是溢出
- mongodb - MongoDB groupby - 在字段中提取逗号分隔值