簡體   English   中英

在 Pandas 中合並具有多個條件的兩個數據幀

[英]Merging two dataframes with multiple conditions in Pandas

出於某種原因,我不能完全確定為什么 Pandas 沒有合並我的兩個數據幀。 我已經遵循了其他幾個解決方案,但我仍然沒有得到預期的 output。

我的主要 dataframe, df有籃球運動員數據,並且非常大,有 10000 多行。 這是df的片段:

    Date           Team  
    12/10/2020      BOS
    12/10/2020      ATL
    12/10/2020      PHI
    12/11/2020      BOS
    12/11/2020      ATL
    12/11/2020      PHI

我的第二個 dataframe ps小得多,有 1000 行,並且有團隊信息:

    Date            Team  Points  H/A
    12/10/2020      ATL   70      1
    12/10/2020      PHI   120     1
    12/10/2020      BOS   100     0
    12/11/2020      BOS   110     0
    12/11/2020      PHI   93      1
    12/11/2020      ATL   104     0

匹配dfps后的df的預期 output :

    Date            Team  Points  H/A
    12/10/2020      BOS   100     0
    12/10/2020      ATL   70      1
    12/10/2020      PHI   120     1
    12/11/2020      BOS   110     0
    12/11/2020      ATL   104     0
    12/11/2020      PHI   93      1

我的嘗試: pd.merge(df,ps, on=['Team','Date'])
df = pd.merge(df,ps, on=['Team','Date'])我認為與上面的相同,只是再次分配df

當我執行上述任一操作並將df保存到 CSV 時, ps標頭和數據不會出現在df的任何位置。 我想將psdf合並,匹配“日期”和“團隊”,以便df中的每個玩家都有來自ps列“Points”和“H/A”的相應值。 我應該注意,兩個數據集中的日期都不是按時間順序排列的,如果這有區別的話。

這對我有用:

import pandas as pd

df = pd.DataFrame({'Date': ['12/10/2020']*3 + ['12/11/2020']*3,
                   'Team': ['BOS', 'ATL', 'PHI', 'BOS', 'ATL', 'PHI']})


ps = pd.DataFrame({'Date': ['12/10/2020']*3 + ['12/11/2020']*3,
                   'Team': ['ATL', 'PHI', 'BOS', 'BOS', 'PHI', 'ATL'],
                   'Points': [70, 120, 100, 110, 93, 104],
                   'H/A': [1, 1, 0, 0, 1, 0]})

df = pd.merge(df,ps, on=['Team','Date'])

print(df)

Output:

         Date Team  Points  H/A
0  12/10/2020  BOS     100    0
1  12/10/2020  ATL      70    1
2  12/10/2020  PHI     120    1
3  12/11/2020  BOS     110    0
4  12/11/2020  ATL     104    0
5  12/11/2020  PHI      93    1

暫無
暫無

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

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