【发布时间】:2017-05-24 20:20:25
【问题描述】:
我有 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,这两个数据框都有名称列,所以我需要将它合并到数据框df,然后我需要根据数据框名称的最后一部分选择列.也就是说,例如,如果数据帧是df_ID,那么对于来自数据帧Name 的所有匹配行,我需要所有以"ID" + "Name" 结尾的列df,如果数据帧ID 为df_REL,那么我需要我所有的列都以 df 的"RE" + "Name" 结尾,我想单独保存它。
我知道我可以在循环内调用,
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]
但是这里的 ID,当数据帧以 RE 等结尾时必须再次更改,我有几个不同字符串的文件,所以任何更好的解决方案都会很棒
所以最后我需要 df_ID 作为所有以 ID 结尾的列
df_ID = pd.DataFrame({'Name': ['CTA15', 'CTA16'],
'AA_ID': [22, 22'],
'BB_ID':[4, 5],
'CC_ID' : [2, 2]})
任何帮助都会很棒
【问题讨论】:
-
使用
pd.merge可以得到您期望的结果。你试过了吗? -
能否请您检查我编辑的问题。我试过但我的问题的主要部分是基于文件名的选择列。
-
您只想保留那些带有
ID的列? -
如果 dfs 中的数据框以 _ID 结尾,另一个明智的做法是检查数据框中的名称并根据该名称选择列。也就是说,例如,如果数据框是 df_ID,那么对于来自数据框 df 的名称中的所有匹配行,我需要所有以“ID”+“名称”结尾的列,如果数据框是 df_REL,那么我需要所有列以 df 中的“RE”+“Name”结尾。我想我需要一个 if 循环