【问题标题】:Python Pandas showing change in position between two dataframesPython Pandas 显示两个数据帧之间的位置变化
【发布时间】:2021-02-22 14:24:02
【问题描述】:

我正在读取两个数据框,查看一列,然后用 -1 或 +1 等显示两个数据框之间的位置差异。 我尝试了以下代码,但它仅在英国航空公司和瑞安航空公司之间存在差异时显示 0 位置更改

first = pd.read_csv("C:\\Users\\airma\\PycharmProjects\\Vatsim_Stats\\Vatsim_stats\\Base.csv", encoding='unicode_escape')
df1 = pd.DataFrame(first, columns=['airlines', 'Position'])
second = pd.read_csv("C:\\Users\\airma\\PycharmProjects\\Vatsim_Stats\\Vatsim_stats\\Base2.csv", encoding='unicode_escape')
df2 = pd.DataFrame(second, columns=['airlines', 'Position'])

df1['Position Change'] = np.where(df1['airlines'] == df2['airlines'], 0, df1['Position'] - df2['Position'])

我也尝试过使用以下代码,但只是不断收到ValueError: cannot reindex from a duplicate axis

df1.set_index('airlines', drop=False)  # Set index to cross reference by (icao)
df2.set_index('airlines', drop=False)
df2['Position Change'] = df1[['Position']].sub(df2['Position'], axis=0)  
df2 = df2.reset_index(drop=True)  
pd.set_option('display.precision', 0) 

基本 csv 看起来像这样 -

Base2 csv 看起来像这样 -

如您所见,British Airways 在 Base csv 中位于 3 位,在 Base 2 csv 中位于 4 位,但在运行代码时,它仅显示 0 并且不会在两个数据帧之间进行数学运算。
已经坚持了好几天了,非常感谢您的帮助。

【问题讨论】:

    标签: python pandas dataframe comparison valueerror


    【解决方案1】:

    我想提供一些基于列、值和 if 语句的更简单的方法。 当您拥有大数据框时,它可能有点没用,但它可以为您提供您期望的信息。

    first = pd.read_csv("C:\\Users\\airma\\PycharmProjects\\Vatsim_Stats\\Vatsim_stats\\Base.csv", encoding='unicode_escape')
    df1 = pd.DataFrame(first, columns=['airlines', 'Position'])
    second = pd.read_csv("C:\\Users\\airma\\PycharmProjects\\Vatsim_Stats\\Vatsim_stats\\Base2.csv", encoding='unicode_escape')
    df2 = pd.DataFrame(second, columns=['airlines', 'Position'])
    

    我同意,我对您的问题的回答不正确。 现在,如果我理解正确 - 您想在 DataFrame 中创建新列,如果 2 个 DataFrame 中的两个相同列不正确,则为 -1,如果正确,则为 1。

    应该有帮助:

    key = "Name_Of_Column"
    new = []
    for i in range(0, len(df1)):
        if df1[key][i] != df2[key][i]:
            new.append(-1)
        else:
            new.append(1)
    
    df3 = pd.DataFrame({"Diff":new}) # I create new DataFrame as Dictionary.
    df1 = df1.append(df3, ignore_index = True)
    print(df1)
    

    【讨论】:

    • 感谢您花时间回答,但您的代码所做的只是告诉我哪些行不匹配。我需要创建一个名为Position change 的新列,它向我显示它在数据框中向上或向下移动了多少,例如显示-1 或+1。
    【解决方案2】:

    我给你一个替代方案,我不确定它是否受到赞赏。但只是一个想法。

    在阅读了两个 csv 并获得了您需要的列之后,为什么不尝试为列'airlines' 加入两个数据框?它将合并两个数据框,键为“航空公司”

    【讨论】:

    • 非常感谢您的回答,但这对我没有帮助。我所追求的是看到旧 csv 和新 csv 之间航空公司的位置差异,然后在名为 Position Change 的新列中显示位置变化。您的答案只是合并了一列。
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多