簡體   English   中英

基於組 pandas 合並兩個數據幀

[英]Merging two dataframes based on groups pandas

我想要兩個合並這兩個數據框:

df1
    a   b   c                              
4   0   1   3
5   0   1   3
6   0   1   3
2   1   2   2
3   1   2   2
15  2   1   3
12  2   1   3
13  2   1   3
15  3   1   4
14  3   1   4
8   3   1   4
9   3   1   4
df2

b  c  e
1  3  2
1  3  0
1  3  1

df1 應按 a 分組並與 df2 合並,如果它們在一組 a 中相等。 合並/加入后它應該是這樣的:

    a   b   c   e                              
4   0   1   3   2
5   0   1   3   0
6   0   1   3   1
2   1   2   2   nan
3   1   2   2   nan
15  2   1   3   2
12  2   1   3   0
13  2   1   3   1
15  3   1   4   nan
14  3   1   4   nan
8   3   1   4   nan
9   3   1   4   nan

誰能幫我?

您並不真正想要合並,因為當 2 列的值對於這 3 行是通用的時,您想要復制3行的值。

我將使用專用的 function 來控制一個組確實包含與df2一樣多的行並且值相同:

def tst(x):
    if len(x) != 3: return False
    x = x.reset_index()[['b', 'c']]
    return (x == df2[['b', 'c']]).all().all()

然后我們可以寫:

new_col = df1.groupby('a').apply(lambda x: df2['e'] if tst(x) else pd.Series(
    pd.np.nan, index = x.index))
new_df = pd.merge(df1, df2,  how='left', left_on=['b','c'], right_on = ['b','c'])

這應該適用於您的情況。 文檔鏈接

暫無
暫無

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

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