【问题标题】:Comparing columns of different pandas dataframes比较不同熊猫数据框的列
【发布时间】:2017-03-28 08:07:28
【问题描述】:

我是 Python 新手,我使用 pandas 数据框来存储和处理大型数据集。

我很想知道是否可以比较具有类似名称的列的数据框之间的值。例如,我所追求的功能类似于比较此数据框中的“A”列:

   A
0  9
1  9
2  5
3  8
4  7
5  9
6  2
7  2
8  5
9  7

到这一列的“A”列:

   A
0  6
1  3
2  7
3  8
4  2
5  5
6  1
7  8
8  4
9  9

然后,对于每一行,我将确定两个“A”值中的哪一个更小,并将其添加到第一个数据帧中名为“B”的新列中:

   A  B
0  9  6
1  9  3
2  5  5
3  8  8
4  7  2
5  9  5
6  2  1
7  2  2
8  5  4
9  7  7

我知道

pandas.DataFrame.min 

方法,但据我了解,这只会定位一列的最小值,不能用于比较不同数据框的列。我不确定还有其他方式可以实现此功能

任何解决这个(可能)非常简单的问题的建议将不胜感激!谢谢。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你可以使用numpy.minimum():

    import numpy as np
    df1['B'] = np.minimum(df1.A, df2.A)
    

    或者使用Series.where()替换值:

    df1['B'] = df1['A'].where(df1.A < df2.A, df2.A)
    

    【讨论】:

    • 太好了,谢谢。我使用了Series.where() 方法。它适用于我的大部分数据集,但在某些情况下,我的数据帧长度不等。您认为这可能是此错误消息的原因吗? ValueError: Can only compare identically-labeled Series objects 有没有你知道的处理不等长数据帧的解决方法?
    • 如果数据帧长度不等,您希望结果如何?
    • 好点。考虑到这一点:我希望仍然选择最小值,即使它位于另一个 DataFrame 中没有出现的行中。也许现在,最好将最小值写入新的 Series 或 DataFrame,因为我们之前添加的 DataFrame 可能是较短的。我希望这一切都被清楚地描述了,如果我能澄清任何事情,请告诉我。
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多