我有两个具有相同列和相似内容的数据框。
我想在每个应用相同的功能,而不必强行使用它们或连接dfs。我试图将这些对象传递给嵌套字典,但这似乎比它的价值还要麻烦(我不相信dataframe.to_dict支持传递到现有列表中)。
但是,似乎for循环将dfs列表存储在df对象中,而且我不知道如何将其恢复为原始dfs ...请参见下面的示例。
df1 = {'Column1': [1,2,2,4,5],
'Column2': ["A","B","B","D","E"]}
df1 = pd.DataFrame(df1, columns=['Column1','Column2'])
df2 = {'Column1': [2,11,2,2,14],
'Column2': ["B","Y","B","B","V"]}
df2 = pd.DataFrame(df2, columns=['Column1','Column2'])
def filter_fun(df1, df2):
for df in (df1, df2):
df = df[(df['Column1']==2) & (df['Column2'].isin(['B']))]
return df1, df2
filter_fun(df1, df2)
答案 0 :(得分:2)
如果您将过滤器作为函数编写,则可以将其应用于列表推导中:
def filter(df):
return df[(df['Column1']==2) & (df['Column2'].isin(['B']))]
df1, df2 = [filter(df) for df in (df1, df2)]
答案 1 :(得分:1)
我建议使用自定义的keys
进行串联,因为1)很容易将其分配回来,并且2)您可以一次执行相同的操作,而不必执行两次。
# Concatenate df1 and df2
df = pd.concat([df1, df2], keys=['a', 'b'])
# Perform your operation
out = df[(df['Column1'] == 2) & df['Column2'].isin(['B'])]
out.loc['a'] # result for `df1`
Column1 Column2
1 2 B
2 2 B
out.loc['b'] # result for `df2`
Column1 Column2
0 2 B
2 2 B
3 2 B
这对于大多数操作应该可以正常工作。对于groupby,您还将希望在第0 个索引级别进行分组。