我有3个数据帧, DF
df = pd.DataFrame({'Name': ['CTA15', 'CTA16', 'AC007', 'AC007', 'AC007'],
'AA_ID': [22, 22, 2, 2, 2],
'BB_ID':[4, 5, 6, 8, 9],
'CC_ID' : [2, 2, 3, 3, 3],
'DD_RE': [4,7,8,9,0],
'EE_RE':[5,8,9,9,10]})
和df_ID,
df_ID = pd.DataFrame({'Name': ['CTA15', 'CTA16', 'CFV', 'SAP', 'SOS']})
而另一个是df_RE
,这两个数据框都有列Name,所以我需要将它合并到数据帧df,然后我需要根据数据的最后部分选择列框架的名称。也就是说,例如,如果数据框是df_ID
,那么我需要"ID" + "Name"
的所有匹配行来自数据框Name
的{{1}}的所有匹配行,如果数据框ID df
然后我需要我所有列以df中的df_REL
结尾,我想单独保存它。
我知道我可以在循环中调用,
"RE" + "Name"
但是这里的ID,当数据帧以RE结束时必须再次改变,依此类推,我有几个不同字符串的文件,所以任何更好的解决方案都会很棒
所以最后我需要df_ID,因为所有列都以ID
结尾for dfs in dataframes:
ID=[col for col in df.columns if '_ID' in col]
df_ID=pd.merge(df,df_ID,on='Name')
df_ID=df_ID[ID]
任何帮助都会很棒
答案 0 :(得分:1)
您可以先将df与df_ID合并,然后将列以ID结尾。
pd.merge(df,df_ID,on='Name')[[e for e in df.columns if e.endswith('ID') or e=='Name']]
Out[121]:
AA_ID BB_ID CC_ID Name
0 22 4 2 CTA15
1 22 5 2 CTA16
同样,这也可以用于df_RE df。
pd.merge(df,df_RE,on='Name')[[e for e in df.columns if e.endswith('RE') or e=='Name']]
答案 1 :(得分:1)
假设df
中的列Name
以及带有后缀的内容(例如您列出的示例(例如_ID
,_RE
),那么您可以做什么通过列名解析,首先提取所有唯一可能的后缀:
# since the suffixes follow a pattern of `_*`, then I can look for the `_` character
suffixes = list(set([col[-3:] for col in df.columns if '_' in col]))
现在,通过后缀列表,您接下来想要创建现有数据框的字典,其中字典中的键是后缀,值是具有后缀名称的数据框(例如df_ID
, df_RE
):
dfs = {}
dfs['_ID'] = df_ID
dfs['_RE'] = df_RE
... # and so forth
现在,您可以循环遍历suffixes
列表,以使用列表中的每个后缀提取相应的列,并执行合并和列提取:
for suffix in suffixes:
cols = [col for col in df.columns if suffix in col]
dfs[suffix] = pd.merge(df, dfs[suffix], on='Name')
dfs[suffix] = dfs[suffix][cols]
现在你有了后缀数据帧的字典。如果您希望将数据帧作为单独的变量而不是将它们保存在字典中,现在可以将它们设置为单个对象:
df_ID = dfs['_ID']
df_RE = dfs['_RE']
... # and so forth
import pandas as pd
df = pd.DataFrame({'Name': ['CTA15', 'CTA16', 'AC007', 'AC007', 'AC007'],
'AA_ID': [22, 22, 2, 2, 2],
'BB_ID': [4, 5, 6, 8, 9],
'CC_ID': [2, 2, 3, 3, 3],
'DD_RE': [4, 7, 8, 9, 0],
'EE_RE': [5, 8, 9, 9, 10]})
# Get unique suffixes
suffixes = list(set([col[-3:] for col in df.columns if '_' in col]))
dfs = {} # dataframes dictionary
df_ID = pd.DataFrame({'Name': ['CTA15', 'CTA16', 'CFV', 'SAP', 'SOS']})
df_RE = pd.DataFrame({'Name': ['AC007']})
dfs['_ID'] = df_ID
dfs['_RE'] = df_RE
for suffix in suffixes:
cols = [col for col in df.columns if suffix in col]
dfs[suffix] = pd.merge(df, dfs[suffix], on='Name')
dfs[suffix] = dfs[suffix][cols]
df_ID = dfs['_ID']
df_RE = dfs['_RE']
print(df_ID)
print(df_RE)
<强>结果:强>
AA_ID BB_ID CC_ID
0 22 4 2
1 22 5 2
DD_RE EE_RE
0 8 9
1 9 9
2 0 10