使用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'
答案 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