【问题标题】:Comparing two columns in pandas dataframe to create a third one比较 pandas 数据框中的两列以创建第三列
【发布时间】:2017-05-17 08:12:35
【问题描述】:

我有以下数据框:

In [25]: df1
Out[25]: 
          a         b
0  0.752072  0.813426
1  0.868841  0.354665
2  0.944651  0.745505
3  0.485834  0.163747
4  0.001487  0.820176
5  0.904039  0.136355
6  0.572265  0.250570
7  0.514955  0.868373
8  0.195440  0.484160
9  0.506443  0.523912

现在我想创建另一列df1['c'],其值将在df1['a']df1['b'] 中最大。因此,我想将其作为输出:

In [25]: df1
Out[25]: 
          a         b        c
0  0.752072  0.813426 0.813426
1  0.868841  0.354665 0.868841
2  0.944651  0.745505 0.944651
3  0.485834  0.163747 0.485834
4  0.001487  0.820176 0.820176

我试过了:

In [23]: df1['c'] = np.where(max(df1['a'], df1['b'], df1['a'], df1['b'])

但是,这会引发语法错误。我看不出有任何方法可以在熊猫中做到这一点。我的实际数据框太复杂了,所以我想有一个通用的解决方案。有什么想法吗?

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    你可以使用Series.where:

    df['c'] = df.b.where(df.a < df.b, df.a)
    print (df)
              a         b         c
    0  0.752072  0.813426  0.813426
    1  0.868841  0.354665  0.868841
    2  0.944651  0.745505  0.944651
    3  0.485834  0.163747  0.485834
    4  0.001487  0.820176  0.820176
    5  0.904039  0.136355  0.904039
    6  0.572265  0.250570  0.572265
    7  0.514955  0.868373  0.868373
    8  0.195440  0.484160  0.484160
    9  0.506443  0.523912  0.523912
    

    numpy.where 的解决方案:

    df['c'] = np.where(df['a'] > df['b'], df['a'], df['b'])
    print (df)
              a         b         c
    0  0.752072  0.813426  0.813426
    1  0.868841  0.354665  0.868841
    2  0.944651  0.745505  0.944651
    3  0.485834  0.163747  0.485834
    4  0.001487  0.820176  0.820176
    5  0.904039  0.136355  0.904039
    6  0.572265  0.250570  0.572265
    7  0.514955  0.868373  0.868373
    8  0.195440  0.484160  0.484160
    9  0.506443  0.523912  0.523912
    

    或者更简单的是找到max:

    df['c'] = df[['a','b']].max(axis=1)
    print (df)
              a         b         c
    0  0.752072  0.813426  0.813426
    1  0.868841  0.354665  0.868841
    2  0.944651  0.745505  0.944651
    3  0.485834  0.163747  0.485834
    4  0.001487  0.820176  0.820176
    5  0.904039  0.136355  0.904039
    6  0.572265  0.250570  0.572265
    7  0.514955  0.868373  0.868373
    8  0.195440  0.484160  0.484160
    9  0.506443  0.523912  0.523912
    

    【讨论】:

    • 成功了!我不知道 pandas 中的 where 方法。 :)
    猜你喜欢
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 2019-02-23
    • 2018-09-27
    • 2019-03-17
    • 1970-01-01
    相关资源
    最近更新 更多