簡體   English   中英

根據列名結尾拆分 pandas df

[英]Split pandas df based on column name endings

data = {"name": [], "value": [], "x1xyz": [], "x2xyz": [], "x3xyz":[], "x1abc": [], "x2abc": [], "x3abc": []}

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

我希望根據列名的結束方式分為兩個單獨的數據框,即:

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'])

我真的不確定如何處理這個問題?

在我使用的真實數據集中,列名結尾比 jsut 多兩個。

您可以使用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           

這是一個替代解決方案,僅使用對 select 列的列表理解:

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

dfs將是一個字典,其中每個鍵都是一個結尾,值是經過過濾以包含相關列的 DataFrame。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM