使用pandas找到两个或更多列的最大值。

13 浏览
0 Comments

使用pandas找到两个或更多列的最大值。

我有一个包含列AB的数据框。我需要创建一个列C,使得对于每个记录/行:

C = max(A, B)

我应该如何操作?

0
0 Comments

问题:如何在pandas中找到两个或多个列的最大值?

原因:需要在给定的数据框中找到两个或多个列的最大值。可能是为了分析这些列之间的关系或找到最大值所在的时间戳。

解决方法:使用pandas库中的max函数来找到最大值。下面是解决该问题的代码示例:

df[['A','B']].max(axis=1).max(axis=0)

对于给定的数据框df,我们选择列A和B,并使用max函数找到每行的最大值。然后,我们再次使用max函数找到所有最大值中的最大值。最终结果是两列中的最大值。

示例:

df = 
                     A          B
timestamp                                
2019-11-20 07:00:16  14.037880  15.217879
2019-11-20 07:01:03  14.515359  15.878632
2019-11-20 07:01:33  15.056502  16.309152
2019-11-20 07:02:03  15.533981  16.740607
2019-11-20 07:02:34  17.221073  17.195145
print(df[['A','B']].max(axis=1).max(axis=0))
17.221073

在上面的示例中,我们选择了列A和B,并找到每行的最大值。然后,我们再次使用max函数找到所有最大值中的最大值,结果为17.221073。

通过使用pandas中的max函数,我们可以方便地找到两个或多个列的最大值,并进行进一步的分析。这种方法可以帮助我们快速了解数据中的最大值,并做出相应的决策。

0
0 Comments

在这篇文章中,我们将讨论如何使用pandas找到两列或多列的最大值,并介绍了解决该问题的两种方法。

首先,我们介绍了一种常见的解决方法,即直接调用DataFrame对象上定义的函数。例如,可以使用DataFrame的max()函数找到指定列的最大值。下面是一个示例代码:

df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})
df['C'] = df[['A', 'B']].max(axis=1)

然而,如果你想深入了解一些底层的实现细节,可以使用numpy函数在DataFrame的底层数据数组上调用,而不是直接调用DataFrame对象上的函数。这种方法在性能上稍微更快一些。具体来说,可以使用numpy的ndarray.max()函数沿着指定轴找到最大值。下面是一个示例代码:

df['C'] = df[['A', 'B']].values.max(axis=1)

如果数据中存在NaN值,可以使用numpy的nanmax()函数。下面是一个示例代码:

df['C'] = np.nanmax(df.values, axis=1)

除了上述方法,还可以使用numpy的maximum.reduce()函数。maximum是一个ufunc(通用函数),每个ufunc都有一个reduce方法。可以使用numpy的maximum.reduce()函数在指定轴上找到最大值。下面是一个示例代码:

df['C'] = np.maximum.reduce(df[['A', 'B']].values, axis=1)

在文章的最后,我们展示了一个性能对比图表,通过使用perfplot库对这些方法进行了基准测试。根据图表显示,np.maximum.reduce()和np.max()在大多数情况下(对于大多数正常大小的DataFrame)表现得几乎相同,并且比DataFrame.max()稍微快一些。这种性能差异可能是由于内部开销(索引对齐、处理NaN等)所导致的。下面是一个基准测试的示例代码:

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)

通过本文的介绍,我们了解了使用pandas找到两列或多列的最大值的两种方法,并对它们进行了性能比较。这些方法可以帮助我们在数据分析和处理中更高效地找到最大值。

0
0 Comments

问题的出现原因是需要找到pandas中多个列的最大值,并将最大值存储到新的一列中。解决方法可以通过使用max函数和axis参数来实现。

首先,导入pandas库,并创建一个包含两个列"A"和"B"的DataFrame。然后,可以通过使用max函数和axis参数来找到每一行中两个列的最大值。使用max函数时,需要指定axis=1,表示在每一行中找到最大值。代码如下:

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

执行以上代码后,会返回一个Series对象,其中包含每一行中两个列的最大值。结果如下:

0    1
1    8
2    3
dtype: int64

接下来,可以将最大值存储到一个新的列"C"中。可以通过将Series对象赋值给DataFrame中的一个新列来实现。代码如下:

df["C"] = df[["A", "B"]].max(axis=1)

执行以上代码后,DataFrame会添加一个名为"C"的新列,并将每一行中两个列的最大值存储到该列中。结果如下:

   A  B  C
0  1 -2  1
1  2  8  8
2  3  1  3

如果已知"A"和"B"是唯一的列,还可以简化代码,直接使用max函数和axis参数来找到每一行的最大值,并将结果赋值给新的列"C"。代码如下:

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

此外,还可以使用apply函数和max函数来实现相同的功能。通过将max函数作为参数传递给apply函数,并指定axis=1,可以在每一行中找到最大值。代码如下:

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

以上就是使用pandas找到多个列的最大值并存储到新列中的方法。

0