查找其中一列发生移动的两列之间的最大值

问题描述 投票:0回答:3

我的数据框是:

import pandas as pd
df = pd.DataFrame(
    {
       'a': [20, 9, 31, 40],
       'b': [1, 10, 17, 30],
    }
)

预期输出:创建列

c

    a   b   c
0  20   1  20
1   9  10  20
2  31  17  17
3  40  30  31

步骤:

c
df.b
df.a.shift(1).bfill()
之间的最大值。

我的尝试:

df['temp'] = df.a.shift(1).bfill()
df['c'] = df[['temp', 'b']].max(axis=1)

这是最干净的方式/最好的方法吗?

python pandas dataframe max
3个回答
1
投票

尝试这样

import pandas as pd

df = pd.DataFrame(
    {
       'a': [20, 9, 31, 40],
       'b': [1, 10, 17, 30],
    }
)
df['c'] = df['a'].shift(1).bfill().combine(df['b'], max)
print(df)

输出:

    a   b     c
0  20   1  20.0
1   9  10  20.0
2  31  17  17.0
3  40  30  31.0

1
投票

如果您不需要临时列,则可以在单行代码中使用

where()
替换移位列上的值。

df['c'] = df['a'].shift(1).bfill().where(lambda x: x>df['b'], df['b'])

这与另一个答案中发布的

combine()
方法类似,但是这个方法进行矢量化比较,而
combine()
则按元素进行比较,因此随着数据帧长度的增加,这应该会更快。


0
投票

导入错误:tidak dapat mengimpor nama 'DataError' dari 'pandas.core.base' (/Users/ernidiahsusanti/anaconda3/lib/python3.11/site-packages/pandas/core/base.py)

© www.soinside.com 2019 - 2024. All rights reserved.