python - 根据多列的条件在 Pandas 数据框中选择一系列行
问题描述
我正在尝试根据不同列中的两个条件从当前 DF 中的一系列行中选择并创建一个新数据框。下面是一个来自具有两列的较大 DF 的示例。我有兴趣创建一个新的 DF,其行从第 0 列等于 BEGIN_GROUP 和第 1 列等于 R 到 END_GROUP R 开始。我不能仅仅根据第 0 列缩小范围,因为 BEGIN_GROUP 和 END_GROUP 在DF,唯一独特的是相邻列中的值(在本例中为 R)。提前致谢。
0 1
15 compressionType xx
16 jpegProfileName xx
17 BEGIN_GROUP R
18 ULLon xx
19 ULLat xx
20 ULHAE xx
21 URLon xx
22 URLat xx
23 URHAE xx
24 LRLon xx
25 LRLat xx
26 LRHAE xx
27 LLLon xx
28 LLLat xx
29 LLHAE xx
30 absCalFactor xx
31 effectiveBandwidth xx
32 TDILevel xx
33 END_GROUP R
34 BEGIN_GROUP G
35 ULLon xx
解决方案
假设您的数据框更大并且实际上具有适当的索引。在示例中对此进行模拟:
df = df.reset_index()
构建两个字典,一个带有起始索引,一个带有结束索引:
beginnings = df.loc[df['0'] == 'BEGIN_GROUP']['1'].to_dict()
endings = df.loc[df['0'] == 'END_GROUP']['1'].to_dict()
beginnings, endings
({17: 'R', 34: 'G'}, {33: 'R'})
现在根据这些保存的索引构建新的数据框:
dfs = {}
for begin_idx, begin_label in beginnings.items():
for end_idx, end_label in endings.items():
if begin_label == end_label:
dfs[begin_label] = df.iloc[begin_idx:end_idx+1]
请注意,这会构建一个包含您的数据框的字典。您可以通过它们的独特标签来称呼它们:
dfs['R']
index 0 1
2 17 BEGIN_GROUP R
3 18 ULLon xx
4 19 ULLat xx
5 20 ULHAE xx
6 21 URLon xx
7 22 URLat xx
8 23 URHAE xx
9 24 LRLon xx
10 25 LRLat xx
11 26 LRHAE xx
12 27 LLLon xx
13 28 LLLat xx
14 29 LLHAE xx
15 30 absCalFactor xx
16 31 effectiveBandwidth xx
17 32 TDILevel xx
18 33 END_GROUP R
推荐阅读
- sql - SQL 中的 IN 语句仅返回第一个值
- javascript - Electron WebView 窗口句柄
- c# - ListBox WPF:更改 SelectedItem 的前景色并保留 Material Design?
- reactjs - 在 Heroku 上部署 create-react-app 时出现无效的主机错误
- excel - PowerPoint 实时字段,链接到 Excel 数据
- javascript - 遇到node.js TypeError:第一个参数必须是一个字符串或缓冲区,并使用最简单的脚本
- java - Android JSON 对象获取
- sql - EF Entity.Id 导致加入?
- sql - 使用限制的 Sequelize 分页需要 4 倍的时间来加载。我该如何优化?
- ms-word - Word - 删除 <> 之间的文本,包括表格