【问题标题】:Comparing two dataframes based off one column, with the equal values in different index positions比较基于一列的两个数据帧,不同索引位置的值相等
【发布时间】:2019-08-21 07:57:37
【问题描述】:

所以我在试图找到一个我似乎遇到的问题的解决方案时遇到了问题。

我正在尝试比较两个相当大的数据帧,但对于我的第一个问题,我已将其减少到较小的样本量。

目前,我想简单地打印出这两个数据框中的玩家姓名。以后我会循环遍历这些列来比较值并记录差异,但那是我未来的问题。

我注意到,在共享的其他示例和解决方案中,大多数人将在同一个索引中拥有他们想要比较的两个值,但是我对 Pandas 命令的经验不足,不知道如何操作这些解决方案。

import pandas as pd

df1=pd.read_excel('Example players 2019.xlsx')
df2=pd.read_excel('Example players 2018.xlsx')

header2019 = df1.iloc[0] 
df1 = df1[1:] 
df1.columns = header2019
header2018 = df2.iloc[0]
df2 = df2[1:]
df2.columns = header2018

print('df1')
print(df1)
print('df2')
print(df2)

columnLength2019=df1.shape[1]
columnLength2018=df2.shape[1]

rowLength2019=df1.shape[0]
rowLength2018=df2.shape[0]

for i in range (1, rowLength2019):
    for j in range (1, rowLength2018):
        if df1['Player'] == df2['Player']:
            print(df1['Player'])

Example players 2019 Example players 2018

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    您可能希望合并播放器列上的两个数据框,请参阅https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

    例子:

    import pandas as pd
    
    df_2018 = pd.DataFrame({'player':['a','b','c'], 'team':['x','y','z']})
    df_2019 = pd.DataFrame({'player':['b','c','d'], 'team':['y','j','k']})
    
    matched = df_2018.merge(df_2019,
                            on='player',
                            how='inner',
                            suffixes=['_2018','_2019']
                            )
    print(matched)
    

    输出:

      player team_2018 team_2019
    0      b         y         y
    1      c         z         j
    

    要打印出匹配的玩家,您可以执行以下操作:

    for player in matched['player']:
        print(player)
    

    将这两年的数据放在同一个 DataFrame 中也应该便于以后比较它们。

    【讨论】:

      【解决方案2】:

      您可以使用isin 来检查一个值是否在一个系列中

      a =df1[(df1.player.isin(df2.player))]
      for player in a['player']:
          print(player)
      

      或者您可以使用np.whereisin 在一行中检查和打印。

      np.where((df1.player.isin(df2.player)), df1.player+ " is present", df1.player+ " is NOT present").tolist()
      

      您也可以使用 np.where 在数据框中创建一列

      df1['present'] = np.where((df1.player.isin(df2.player)), "Present", "NOT present")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-03
        • 1970-01-01
        • 2023-01-05
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多