You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Pandas DataFrame按第3列分组,提取对应第2列数据?

按指定列分组提取Pandas子DataFrame的解决方案

看起来你之前的代码思路走偏啦,咱们先理清楚需求:你想要按源DataFrame中列索引为3的列(也就是你说的“第3列”)的不同取值进行分组,每个分组只保留列索引为2和3的两列数据,生成对应的子DataFrame,对吧?

问题出在哪?

你之前写的这段代码逻辑不对:

group = e1[3][2] == "group"
print (e1[group])

e1[3][2]是取列3的第2行单个元素,和字符串"group"比较只会得到一个布尔值,用这个去索引DataFrame当然得不到你要的分组结果啦。

正确的实现方法

这里给你两种好用的方式,按需选择:

方式1:生成命名的子DataFrame(比如DF_38、DF_39)

如果你想直接把每个分组存成单独的变量,可以用groupby配合遍历,同时给每个子DataFrame命名:

import pandas as pd

# 假设你的源数据已经是DataFrame格式的e1
# 按列3进行分组
groups = e1.groupby(3)

# 遍历每个分组,生成对应子DataFrame
for group_value, sub_df in groups:
    # 只保留需要的列2和列3
    target_sub_df = sub_df[[2, 3]]
    # 动态创建变量,比如列3值为38的话,变量名就是DF_38
    globals()[f"DF_{group_value}"] = target_sub_df
    # 打印查看结果
    print(f"DF_{group_value}:")
    print(target_sub_df)

方式2:用字典管理所有子DataFrame(更推荐)

如果分组很多,用全局变量会很乱,把所有子DataFrame存在字典里更整洁:

import pandas as pd

groups = e1.groupby(3)
grouped_dfs = {}

for group_value, sub_df in groups:
    grouped_dfs[group_value] = sub_df[[2, 3]]

# 想要查看某组数据直接通过键取值,比如查看列3为39的子DataFrame
print("DF_39:")
print(grouped_dfs[39])

效果示例

比如针对你源数据中列3为39的行,生成的子DataFrame会是这样:

2   3
0  -67  39
1  -72  39
5  -67  39
26 -71  39
27 -71  39
29 -71  39

完全符合你想要的格式~

内容的提问来源于stack exchange,提问作者Shubham Kuse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:56:07