【问题标题】:Pandas Dataframe (inner) Join on the same DataframePandas Dataframe(内部)加入同一个 Dataframe
【发布时间】:2020-12-07 11:47:17
【问题描述】:

我正在研究如何集群一个 patstat(参考数据库)数据库。

使用我自己的算法,我想出了一个数据框,它显示了参考文献的作者、开始页、结束页、卷和出版年份。

运行:

dfhead = df.head(10)

给我看

现在我想要以下内容: 使用相同的数据框显示内部连接,例如作者、开始页和结束页是相同的。 (行间至少有 3 个相似处)

我试过了:

c = ['author', 'beginpage','endpage', 'volume','publication year']
df_merge = dfhead.merge(dfhead, how = 'inner',on = [c[0],c[1],c[2]])

在哪里

然后将给出答案,使得仅存在具有完全相同行的内部联接,但我不希望包含这些。 在上面的示例中,df_merge 不应采用任何值,因为没有 3 个相似的列。

如果有一些相同行的方法,我会举一个例子:

x = pd.Dataframe({'author':['lee','lee'], 'beginpage':[455,456],'endpage':[477,477],'volume':[300,300]})

请注意,这两行(至少)有 3 个相似的列,因此合并/连接应该是可见的。 但请注意,在不想包括加入完全相同的行!!!

【问题讨论】:

    标签: python pandas dataframe join merge


    【解决方案1】:

    您可以进行内部联接并应用过滤来排除同一行,但使用 groupby 可能会更直接?

    df.groupby(by=['author', 'beginpage','endpage'])
    

    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html

    将聚合/计算/等应用于组:

    https://pandas.pydata.org/pandas-docs/stable/reference/groupby.html

    【讨论】:

    • 我试图排除同一行,但问题是我不知道如何编程。
    • 使用 groupby pandas 有一个问题,因为我的练习目标是我想在一行中显示至少 3 个相同的相似性,并且我有 5 列要检查。请参阅上述代码中的 C 数组。因此,对于 2 行,您必须检查 10 (5ncr3) 种不同的组合。
    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多