Разделить pandas df на основе окончаний имен столбцов - PullRequest
0 голосов
/ 13 июля 2020
data = {"name": [], "value": [], "x1xyz": [], "x2xyz": [], "x3xyz":[], "x1abc": [], "x2abc": [], "x3abc": []}

df = pd.DataFrame (data, columns = ['name', 'value', 'x1xyz', "x2xyz", "x3xyz", 'x1abc', "x2abc", "x3abc"])

И я хочу sh разделить на два отдельных фрейма данных в зависимости от того, как заканчиваются имена столбцов, то есть на:

xyz = {"name": [], "value": [], "xyz": [], "xyz": [], "xyz": []}

xyz = pd.DataFrame (keep, columns = ['name', 'value', 'x1xyz', 'x2xyz', 'x3xyz'])

abc = {"name": [], "value": [], "x1abc": [], "x2abc": [], "x3abc": []}

abc = pd.DataFrame (keep, columns = ['name', 'value', 'x1abc', 'x2abc', 'x3abc'])

Я не совсем уверен, как к этому подойти?

В реальном наборе данных я использую больше окончаний имен столбцов, чем всего два.

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вот альтернативное решение, просто используя понимание списка для выбора столбцов:

endings = ["xyz", "abc"]
dfs = {e: df[["name", "value"] + [c for c in df.columns if c.endswith(e)]] for e in endings}

dfs будет dict, где каждый ключ является окончанием, а значение - это DataFrame, отфильтрованный, чтобы содержать соответствующие столбцы .

0 голосов
/ 13 июля 2020

вы можете использовать filter и вернуть словарь фреймов данных, используя список значений, по которым вы хотите выполнить фильтрацию. нам нужно установить постоянные столбцы в качестве индекса.

filter_vals = ['abc','xyz']


dfs = {
    filter_name: df.set_index(["name", "value"]).filter(like=filter_name)
    for filter_name in filter_vals
}
dfs['xyz']
        x1xyz   x2xyz   x3xyz
name    value
dfs['abc']
        x1abc   x2abc   x3abc
name    value           
...