簡體   English   中英

基於grouby將數據從一個數據幀映射到另一個數據幀

[英]Mapping data from one dataframe to another based on grouby

之前可能有人問過類似的問題,但我找不到任何人可以解決我的問題。 也許我沒有使用正確的搜索詞!

我有兩個熊貓數據框,如下所示:

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

如何使用熊貓以簡單直觀的方式實現這一目標?

使用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'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM