每输入一行返回多行/列的数据帧

时间:2019-11-17 17:19:01

标签: python pandas dataframe apply

我正在使用Apply来利用一个数据框来操纵第二个数据框并返回结果。这是一个简化的示例,我意识到可以使用“ in”逻辑来回答,但现在让我们继续使用.apply()作为约束:

import pandas as pd
df1 = pd.DataFrame({'Name':['A','B'],'Value':range(1,3)})
df2 = pd.DataFrame({'Name':['A']*3+['B']*4+['C'],'Value':range(1,9)})

def filter_df(x, df):
    return df[df['Name']==x['Name']]

df1.apply(filter_df, axis=1, args=(df2,   ))

哪个要返回:

0      Name  Value
0    A      1
1    A      2
2   ...
1      Name  Value
3    B      4
4    B      5
5   ...
dtype: object

我想看到的是一种带有Name和Value标头的格式化DataFrame。所有建议表示赞赏!

Name    Value
0   A   1
1   A   2
2   A   3
3   B   4
4   B   5
5   B   6
6   B   7

1 个答案:

答案 0 :(得分:0)

我认为,这不能仅基于申请完成,您需要pandas.concat

result = pd.concat(df1.apply(filter_df, axis=1, args=(df2,)).to_list())
print(result)

输出

  Name  Value
0    A      1
1    A      2
2    A      3
3    B      4
4    B      5
5    B      6
6    B      7