x_Amir_x Asked: 2024-01-10 11:56:10 +0800 CST2024-01-10 11:56:10 +0800 CST 2024-01-10 11:56:10 +0800 CST 查找其中一列发生移动的两列之间的最大值 772 我的数据框是: 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 脚步: cdf.b是和之间的最大值df.a.shift(1).bfill()。 我的尝试: df['temp'] = df.a.shift(1).bfill() df['c'] = df[['temp', 'b']].max(axis=1) 这是最干净的方法/最好的方法吗? python 4 个回答 Voted Mahboob Nur 2024-01-10T12:05:39+08:002024-01-10T12:05:39+08:00 尝试这样 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 Best Answer cottontail 2024-01-10T12:15:29+08:002024-01-10T12:15:29+08:00 如果您不需要临时列,则可以使用where()单行替换移位列上的值。 df['c'] = df['a'].shift(1).bfill().where(lambda x: x>df['b'], df['b']) combine()这与另一个答案中发布的方法类似,但是这个方法进行矢量化比较,同时combine()按元素进行比较,因此随着数据帧长度的增加,这应该要快得多。 Panda Kim 2024-01-10T12:36:02+08:002024-01-10T12:36:02+08:00 使用 numpy fmax,快速而简单的方法 import numpy as np df['c'] = np.fmax(df['a'].shift().bfill(), df['b']) df a b c 0 20 1 20.0 1 9 10 20.0 2 31 17 17.0 3 40 30 31.0 erni diah 2024-01-10T12:06:52+08:002024-01-10T12:06:52+08:00 ImportError:tidak dapat mengimpor nama 'DataError' dari 'pandas.core.base' (/Users/ernidiahsusanti/anaconda3/lib/python3.11/site-packages/pandas/core/base.py)
尝试这样
输出:
如果您不需要临时列,则可以使用
where()
单行替换移位列上的值。combine()
这与另一个答案中发布的方法类似,但是这个方法进行矢量化比较,同时combine()
按元素进行比较,因此随着数据帧长度的增加,这应该要快得多。使用 numpy
fmax
,快速而简单的方法df
ImportError:tidak dapat mengimpor nama 'DataError' dari 'pandas.core.base' (/Users/ernidiahsusanti/anaconda3/lib/python3.11/site-packages/pandas/core/base.py)