Расположение столбца, в котором изменяется первая буква dataframe-column-title - PullRequest
0 голосов
/ 14 октября 2019

У меня есть пандас DataFrame, имя столбца которого выглядит примерно так: BT_XXX_XX.XX% _X.XX.XX;EH_XXX_XX.XX% _XX.XX.XX;C_XXX_XX.XX% _XX.XX.XX, где X представляет любой буквенно-цифровой символ. Они полностью дезорганизованы.

Я хочу разбить DataFrame на разные DataFrames, содержащие 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_ *.

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Вы можете использовать фильтр столбцов, используя функцию стартов с str, как в примере ниже, не нужно сортировать столбцы перед этим

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())
1 голос
/ 14 октября 2019

Вы можете использовать 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: []}
...