如何对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
相关产品推荐
相关产品推荐

