定位dataframe-column-title首字母更改的列

问题描述 投票:0回答:2

我有一个Pandas DataFrame,其列名称类似:BT_XXX_XX.XX%_X.XX.XX; EH_XXX_XX.XX%_XX.XX.XX; C_XXX_XX.XX%_XX.XX.XX,其中X代表任何字母数字字符。他们是完全混乱的。

我想将数据帧拆分为包含BT _ ,EH _和C_ *的不同数据帧(就像我在bash脚本中所做的一样)。

我已经按字母顺序对它们进行了排序,以使BT _ ,EH _和C_ *顺序排列。但是,我不知道如何自动查找第一个字符串来创建一个全新的DataFrame。

目前,我可以通过每次检查每组列的位置来手动完成此操作。

#Sorting the dataframe by alphabetical order
dataset = dataset.reindex(sorted(dataset.columns), axis=1)

#Splitting the dataframe
df1 = dataset.iloc[:, :72]
df2 = dataset.iloc[:, 72:148]
df3 = dataset.iloc[148, 148:]

我想使此操作自动化,以避免检查BT_ *列的结束位置以及EH_ *或C_ *的起始位置。

python pandas sorting dataframe split
2个回答
0
投票

您可以使用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: []}

0
投票

您可以使用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())
© www.soinside.com 2019 - 2024. All rights reserved.