为了账号安全,请及时绑定邮箱和手机立即绑定

定位 dataframe-column-title 第一个字母发生变化的列

定位 dataframe-column-title 第一个字母发生变化的列

守着星空守着你 2022-06-22 17:10:53
我有一个熊猫数据框,其中列的名称类似于: BT_XXX_XX.XX%_X.XX.XX ;EH_XXX_XX.XX%_XX.XX.XX ; C_XXX_XX.XX%_XX.XX.XX 其中 X 代表任何字母数字字符。他们完全杂乱无章。我想将 DataFrame 拆分为包含 BT_ 、EH_和 C_* 的不同 DataFrame(就像我在 bash 脚本中所做的那样)。我按字母顺序对它们进行了排序,以便按顺序排列 BT_ 、 EH_和 C_* 。但是,我不知道如何自动查找第一个字符串来创建一个全新的 DataFrame。目前我可以通过每次检查每组列的位置来手动执行此操作。#Sorting the dataframe by alphabetical orderdataset = dataset.reindex(sorted(dataset.columns), axis=1)#Splitting the dataframedf1 = dataset.iloc[:, :72]df2 = dataset.iloc[:, 72:148]df3 = dataset.iloc[148, 148:]我希望自动执行此操作,以避免检查 BT_* 列的完成位置以及 EH_* 或 C_* 的开始位置。
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

您可以使用 str 的 startswith 函数来过滤列,如下例所示,无需在此之前对列进行排序


df = pd.DataFrame(np.random.rand(10,10), columns=[f"{a}_{i}" for i in range(5) for a in "AB"])


df1= df.loc[:, df.columns.str.startswith("A_")]

df2 = df.loc[:, df.columns.str.startswith("B_")]


display(df1.head())

display(df2.head())


查看完整回答
反对 回复 2022-06-22
?
郎朗坤

TA贡献1921条经验 获得超9个赞

您可以使用groupby在第一个之前拆分存根上的 DataFrame '_'。您可以将它们存储在以存根作为键的字典中。


df = pd.DataFrame(columns=['BT_XXX_XX.XX%_X.XX.XX', 'BT_13131_1231231', 

                           'EH_XXX_XX.XX%_XX.XX.XX', 'C_XXX_XX.XX%_XX.XX.XX'])


dict(tuple(df.groupby(df.columns.str.split('_').str[0], axis=1)))

{'BT': Empty DataFrame

 Columns: [BT_XXX_XX.XX%_X.XX.XX, BT_13131_1231231]

 Index: [], 

'C': Empty DataFrame

 Columns: [C_XXX_XX.XX%_XX.XX.XX]

 Index: [], 

'EH': Empty DataFrame

 Columns: [EH_XXX_XX.XX%_XX.XX.XX]

 Index: []}


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号