Python 查找包含熊猫的两列或更多列的最大值

Python 查找包含熊猫的两列或更多列的最大值,python,dataframe,pandas,Python,Dataframe,Pandas,我有一个带有列a,B的数据框。我需要创建一个列C,这样对于每个记录/行: C=max(A,B) 我应该怎么做呢?您可以这样获得最大值: >>> import pandas as pd >>> df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]}) >>> df A B 0 1 -2 1 2 8 2 3 1 >>> df[["A", "B"]] A B 0

我有一个带有列
a
B
的数据框。我需要创建一个列
C
,这样对于每个记录/行:

C=max(A,B)


我应该怎么做呢?

您可以这样获得最大值:

>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})
>>> df
   A  B
0  1 -2
1  2  8
2  3  1
>>> df[["A", "B"]]
   A  B
0  1 -2
1  2  8
2  3  1
>>> df[["A", "B"]].max(axis=1)
0    1
1    8
2    3
因此:

>>> df["C"] = df[["A", "B"]].max(axis=1)
>>> df
   A  B  C
0  1 -2  1
1  2  8  8
2  3  1  3
如果您知道“A”和“B”是唯一的列,那么您甚至可以侥幸逃脱

>>> df["C"] = df.max(axis=1)

我想你也可以使用
.apply(max,axis=1)

@DSM的答案在几乎任何正常情况下都是完美的。但是如果你是那种想要比表面层次更深一点的程序员,你可能有兴趣知道在底层调用numpy函数(或者
.values
对于小的输入错误:“df['C']=np.maximum.reduce(df['a',B'].values,axis=1)”应该是“df['C']=np.maximum.reduce(df['a',B']].values,axis=1)“
.apply(max,axis=1)
慢得多。max(axis=1)
# Data borrowed from @DSM's post.
df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})
df
   A  B
0  1 -2
1  2  8
2  3  1

df['C'] = df[['A', 'B']].values.max(1)
# Or, assuming "A" and "B" are the only columns, 
# df['C'] = df.values.max(1) 
df

   A  B  C
0  1 -2  1
1  2  8  8
2  3  1  3 
df['C'] = np.nanmax(df.values, axis=1)
df

   A  B  C
0  1 -2  1
1  2  8  8
2  3  1  3 
df['C'] = np.maximum.reduce(df['A', 'B']].values, axis=1)
# df['C'] = np.maximum.reduce(df[['A', 'B']], axis=1)
# df['C'] = np.maximum.reduce(df, axis=1)
df

   A  B  C
0  1 -2  1
1  2  8  8
2  3  1  3
import pandas as pd
import perfplot

np.random.seed(0)
df_ = pd.DataFrame(np.random.randn(5, 1000))

perfplot.show(
    setup=lambda n: pd.concat([df_] * n, ignore_index=True),
    kernels=[
        lambda df: df.assign(new=df.max(axis=1)),
        lambda df: df.assign(new=df.values.max(1)),
        lambda df: df.assign(new=np.nanmax(df.values, axis=1)),
        lambda df: df.assign(new=np.maximum.reduce(df.values, axis=1)),
    ],
    labels=['df.max', 'np.max', 'np.maximum.reduce', 'np.nanmax'],
    n_range=[2**k for k in range(0, 15)],
    xlabel='N (* len(df))',
    logx=True,
    logy=True)