[英]Check if column name of a pandas df starts with "name" and split that column based on existing white space
[英]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.