基于指定行值筛选Pandas列并拆分DataFrame的方法
解决Pandas DataFrame按指定行值拆分的问题
没问题,我来帮你搞定这个DataFrame拆分的需求!下面是具体的实现步骤和代码,完全贴合你想要的结果:
步骤1:预处理原始DataFrame
首先我们先把原始数据里的class行重命名为cls,同时删掉不需要的d行,和你预期的输出格式对齐:
import pandas as pd # 原始数据 d = { 'data_1': pd.Series([1., 2., 3., 4., 1], index=['a', 'b', 'c', 'd', 'class']), 'data_2': pd.Series([5., 6., 7., 8., 0], index=['a', 'b', 'c', 'd', 'class']), 'data_3': pd.Series([9., 10., 11., 12., 1], index=['a', 'b', 'c', 'd', 'class']) } df = pd.DataFrame(d) # 行名修正:把'class'改成'cls',并删除'd'行 df = df.rename(index={'class': 'cls'}).drop(index='d')
步骤2:按cls行的值拆分DataFrame
接下来我们以cls行的数值为筛选条件,把列分成两类,生成两个新的DataFrame:
# 提取cls行的所有值作为筛选依据 cls_filter = df.loc['cls'] # 第一个DataFrame:筛选cls值为1的列 df_group1 = df.loc[:, cls_filter == 1] # 第二个DataFrame:筛选cls值为0的列 df_group0 = df.loc[:, cls_filter == 0]
最终拆分结果
运行代码后,你会得到完全符合预期的两个DataFrame:
第一个DataFrame(对应cls值为1的列):
| data_1 | data_3 | |
|---|---|---|
| a | 1.0 | 9.0 |
| b | 2.0 | 10.0 |
| c | 3.0 | 11.0 |
| cls | 1.0 | 1.0 |
第二个DataFrame(对应cls值为0的列):
| data_2 | |
|---|---|
| a | 5.0 |
| b | 6.0 |
| c | 7.0 |
| cls | 0.0 |
这样就完美实现了你想要的拆分效果啦!
内容的提问来源于stack exchange,提问作者FrankBool
相关产品推荐
相关产品推荐

