python - Pandas:在一列的每一行中找到最大值并在另一列中识别对应的值

标签 python pandas

我有两个 pandas 数据框列,其值是元组列表,例如:

df[‘A’].values
(1.55, 2.07, 2.20, 2.23)
(0.67, 1.10, 1.73, 1.35)
(2.92, 1.98, 2.30, 2.66)

df[‘B’].values
(1.55, 0.0086, 0.078, 0.12)
(0.672, 0.142, 0.0166, 0.0173)
(1.97, 0.0094, 0.1648, 0.016)

我想为 df['A'] 的每一行取最大值,并在 df['B'] 的相应位置找到该值生成一个新列,例如:

> df[‘C’]
0.12
0.0166
1.97

最佳答案

import pandas as pd
import numpy as np


df_dict = dict(A=[(1.55, 2.07, 2.20, 2.23), (0.67, 1.10, 1.73, 1.35), (2.92, 1.98, 2.30, 2.66)],
    B=[(1.55, 0.0086, 0.078, 0.12), (0.672, 0.142, 0.0166, 0.0173), (1.97, 0.0094, 0.1648, 0.016)])

df = pd.DataFrame(df_dict)

Out[180]: 
                         A                               B
0  (1.55, 2.07, 2.2, 2.23)     (1.55, 0.0086, 0.078, 0.12)
1  (0.67, 1.1, 1.73, 1.35)  (0.672, 0.142, 0.0166, 0.0173)
2  (2.92, 1.98, 2.3, 2.66)   (1.97, 0.0094, 0.1648, 0.016)

def apply_func(row):
    return row.B[np.array(row.A).argmax()]

df['C'] = df.apply(apply_func, axis=1)

Out[182]: 
                         A                               B       C
0  (1.55, 2.07, 2.2, 2.23)     (1.55, 0.0086, 0.078, 0.12)  0.1200
1  (0.67, 1.1, 1.73, 1.35)  (0.672, 0.142, 0.0166, 0.0173)  0.0166
2  (2.92, 1.98, 2.3, 2.66)   (1.97, 0.0094, 0.1648, 0.016)  1.9700

关于python - Pandas:在一列的每一行中找到最大值并在另一列中识别对应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31032896/

相关文章:

python - 在 Vim 中动态获取 Python 自动完成/智能感知的最佳方法是什么?

python - 删除 Django admin 中的默认删除操作

python - MPI4Py 分散 sendbuf 参数类型?

python - 如何在第二级下删除多索引数据框中的第一列排除某些列

python - 非唯一索引的数学运算

python - 设置列中时间戳的格式 - Pandas

c++ - 是否有用于 C++ 的 Python StringIO/StringIO 之类的东西?

python - 使用索引从两个列表制作字典

python - 合并后列上的 Pandas 多重索引

python - 数据库错误 : Write pandas dataframe to vertica using to_sql and vertica_python