根据grouby

时间:2018-09-18 00:45:10

标签: python pandas numpy

以前可能有人问过类似的问题,但是我找不到任何人可以解决我的问题。也许我没有使用正确的搜索词!。

我有两个熊猫数据框,如下所示:

import pandas as pd
import numpy as np

df1

a = np.array([1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3])
b = np.array([1,1,2,2,3,3,1,1,2,2,3,3,1,1,2,2,3,3])
df1 = pd.DataFrame({'a':a, 'b':b})
print(df1)

    a   b
0   1   1
1   1   1
2   1   2
3   1   2
4   1   3
5   1   3
6   2   1
7   2   1
8   2   2
9   2   2
10  2   3
11  2   3
12  3   1
13  3   1
14  3   2
15  3   2
16  3   3
17  3   3

df2如下:

a2 = np.array([1,1,1,2,2,2,3,3,3])
b2 = np.array([1,2,3,1,2,3,1,2,3])
c = np.array([4,8,3,np.nan, 2, 5,6, np.nan, 1])

df2 = pd.DataFrame({'a':a2, 'b':b2, 'c': c})

a   b   c
0   1   1   4.0
1   1   2   8.0
2   1   3   3.0
3   2   1   NaN
4   2   2   2.0
5   2   3   5.0
6   3   1   6.0
7   3   2   NaN
8   3   3   1.0

现在,我想将列c从df2映射到df1,但保持列a = a1和b = b2的分组。因此,对df1进行如下修改

a   b  c
    0   1   1  4
    1   1   1  4
    2   1   2  8
    3   1   2  8
    4   1   3  3
    5   1   3  3
    6   2   1  NaN
    7   2   1  NaN
    8   2   2  2.0
    9   2   2  2.0
    10  2   3  5.0
    11  2   3  5.0
    12  3   1  6.0
    13  3   1  6.0
    14  3   2  NaN
    15  3   2  NaN
    16  3   3  1.0
    17  3   3  1.0

如何使用熊猫通过简单直观的方式实现这一目标?

1 个答案:

答案 0 :(得分:3)

使用merge非常简单:

df1.merge(df2)

    a  b    c
0   1  1  4.0
1   1  1  4.0
2   1  2  8.0
3   1  2  8.0
4   1  3  3.0
5   1  3  3.0
6   2  1  NaN
7   2  1  NaN
8   2  2  2.0
9   2  2  2.0
10  2  3  5.0
11  2  3  5.0
12  3  1  6.0
13  3  1  6.0
14  3  2  NaN
15  3  2  NaN
16  3  3  1.0
17  3  3  1.0

如果您有更多列,并且只想在ab上合并,请使用:

df1.merge(df2, on=['a','b'])