python - 有没有办法根据多次出现的标志条件提取熊猫数据框中的块
问题描述
我有一个熊猫数据框,如下所示
df = pd.DataFrame({"flag":[0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0],
"Val":[1, 5, 7, 5, 4, 7, 8, 11, 13, 44, 7 , 8, 10, 14, 12]})
输出:
输出:
我正在寻找一种基于 flag = 1 多次出现的条件来提取数据帧块的方法
Chunk 1
Val flag
7 1
5 1
4 1
7 1
Chunk 2
Val flag
44 1
7 1
8 1
10 1
等等任何帮助将不胜感激
解决方案
Series
通过比较Series.ne
for not equal withSeries.shift
和累积总和 by Series.cumsum
for helper 组创建,然后Series.map
通过Series.value_counts
过滤器对它们计数 2 行或更多行Series.gt
,仅过滤1
值和下巴两个条件,&
按位AND
并传递到boolean indexing
,最后循环按组:
g = df['flag'].ne(df['flag'].shift()).cumsum()
m1 = g.map(g.value_counts()).gt(1)
m2 = df['flag'].eq(1)
for k, gr in df[m1 & m2].groupby(g):
print (gr)
flag Val
2 1 7
3 1 5
4 1 4
5 1 7
flag Val
9 1 44
10 1 7
11 1 8
12 1 10
推荐阅读
- c++ - vkEnumeratePhysicalDevices() 未找到所有 GPU
- react-native - react-native-firebase) fcm 令牌不随机发行
- blazor - 具有数据库查找功能的 Blazor webassembly 基于资源的策略?
- python - PubSub 云功能写入 Cloud Firestore?
- typescript - 将 tsc --build 标志与 ts-node 一起使用?
- amazon-web-services - 在 AWS lambda 中运行两个 docker 容器
- android - Android:使用 AAB 的 Firebase 应用程序分发导致生产商店
- php - 注册后尝试获取非对象错误的属性“标题”
- scala - 如何在 PySpark 中有条件地加入 2 个 RDD
- amazon-web-services - 调用 terraform 时出现插值错误,而且我不知道如何摆脱它