将某列中某行的值与其他列中的值进行比较

时间:2018-04-02 22:52:34

标签: python pandas for-loop dataframe indexing

使用Pandas

我试图确定某行中的值是否大于同一行中所有其他列中的值。 为此,我循环遍历数据帧的行并使用' all'用于比较其他列中的值的函数;但似乎这会引发错误"字符串索引必须是整数"

这似乎应该有效:这种方法有什么问题?

for row in dataframe:
    if all (i < row['col1'] for i in [row['col2'], row['col3'], row['col4'], row['col5']]):
        row['newcol'] = 'value'

2 个答案:

答案 0 :(得分:1)

构建一个掩码并将其传递给loc

df.loc[df['col1'] > df.loc[:, 'col2':'col5'].max(axis=1), 'newcol'] = 'newvalue'

答案 1 :(得分:0)

在我看来,主要问题是使用可循环逻辑的循环。

以下是使用numpy.where如何实现逻辑的示例。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 9, (5, 10)))

df['new_col'] = np.where(df[1] > df.max(axis=1),
                         'col1_is_max',
                         'col1_not_max')

结果:

   0  1  2  3  4  5  6  7  8  9       new_col
0  4  1  3  8  3  2  5  1  1  2  col1_not_max
1  2  7  1  2  5  3  5  1  8  5   col1_is_max
2  1  8  2  5  7  4  0  3  6  3   col1_is_max
3  6  4  2  1  7  2  0  8  3  2  col1_not_max
4  0  1  3  3  0  3  7  4  4  1  col1_not_max