Pandas - 在多个列上有条件地合并数据帧

时间:2017-05-07 05:43:45

标签: python pandas dataframe merge

我有2个数据帧,我想从一个中取一个列,然后根据多个(其他)列中的值在第二个列中创建一个新列

第一个数据帧(df1):

df1 = pd.DataFrame({'cond': np.repeat([1,2], 5),
                    'point': np.tile(np.arange(1,6), 2),
                    'value1': np.random.rand(10),
                    'unused1': np.random.rand(10)})

   cond  point   unused1    value1
0     1      1  0.923699  0.103046
1     1      2  0.046528  0.188408
2     1      3  0.677052  0.481349
3     1      4  0.464000  0.807454
4     1      5  0.180575  0.962032
5     2      1  0.941624  0.437961
6     2      2  0.489738  0.026166
7     2      3  0.739453  0.109630
8     2      4  0.338997  0.415101
9     2      5  0.310235  0.660748

和第二个(df2):

df2 = pd.DataFrame({'cond': np.repeat([1,2], 10),
                    'point': np.tile(np.arange(1,6), 4),
                    'value2': np.random.rand(20)})

    cond  point    value2
0      1      1  0.990252
1      1      2  0.534813
2      1      3  0.407325
3      1      4  0.969288
4      1      5  0.085832
5      1      1  0.922026
6      1      2  0.567615
7      1      3  0.174402
8      1      4  0.469556
9      1      5  0.511182
10     2      1  0.219902
11     2      2  0.761498
12     2      3  0.406981
13     2      4  0.551322
14     2      5  0.727761
15     2      1  0.075048
16     2      2  0.159903
17     2      3  0.726013
18     2      4  0.848213
19     2      5  0.284404

df1['value1']包含condpoint的每种组合的值。

我想在new_column中创建一个包含df2值的新列(df1['value1']),但值应为cond和{{1}的值在2个数据帧中匹配。

所以我想要的输出如下:

point

在这个例子中,我可以使用tile / repeat,但实际上 cond point value2 new_column 0 1 1 0.990252 0.103046 1 1 2 0.534813 0.188408 2 1 3 0.407325 0.481349 3 1 4 0.969288 0.807454 4 1 5 0.085832 0.962032 5 1 1 0.922026 0.103046 6 1 2 0.567615 0.188408 7 1 3 0.174402 0.481349 8 1 4 0.469556 0.807454 9 1 5 0.511182 0.962032 10 2 1 0.219902 0.437961 11 2 2 0.761498 0.026166 12 2 3 0.406981 0.109630 13 2 4 0.551322 0.415101 14 2 5 0.727761 0.660748 15 2 1 0.075048 0.437961 16 2 2 0.159903 0.026166 17 2 3 0.726013 0.109630 18 2 4 0.848213 0.415101 19 2 5 0.284404 0.660748 并不适合其他数据帧。所以我只需要根据匹配df1['value1']cond

来实现

我尝试合并它们,但1)数字似乎不匹配2)我不想从point带来任何未使用的列:

df1

添加此新列的正确方法是什么,而不必迭代2个数据帧?

0 个答案:

没有答案