gpt4 book ai didi

python - 根据尾随行在 Pandas 数据框中进行计算

转载 作者:行者123 更新时间:2023-11-28 21:23:05 25 4
gpt4 key购买 nike

是否可以根据不同列中的尾随行在 pandas 数据框中进行计算?像这样。

frame = pd.DataFrame({'a' : [True, False, True, False],
'b' : [25, 22, 55, 35]})

我希望输出是这样的:

A     B     C
True 25
False 22 44
True 55 55
False 35 70

当 A 列中的trailing row 为 False 时,C 列与 B 列相同,而当列中的trailing row 为 False 时,C 列为 B * 2 列A 是真的吗?

最佳答案

您可以使用 where系列法:

In [11]: frame['b'].where(frame['a'], 2 * frame['b'])
Out[11]:
0 25
1 44
2 55
3 70
Name: b, dtype: int64

In [12]: frame['c'] = frame['b'].where(frame['a'], 2 * frame['b'])

或者你可以使用 apply (但这通常会更慢):

In [21]: frame.apply(lambda x: 2 * x['b'] if x['a'] else x['b'], axis=1

由于您正在使用“尾随行”,因此您需要使用 shift :

In [31]: frame['a'].shift()
Out[31]:
0 NaN
1 True
2 False
3 True
Name: a, dtype: object

In [32]: frame['a'].shift().fillna(False) # actually this is not needed, but perhaps clearer
Out[32]:
0 False
1 True
2 False
3 True
Name: a, dtype: object

反过来使用where:

In [33]: c = (2 * frame['b']).where(frame['a'].shift().fillna(False), frame['b'])

In [34]: c
Out[34]:
0 25
1 44
2 55
3 70
Name: b, dtype: int64

并更改第一行(例如更改为 NaN,in pandas we use NaN for missing data)

In [35]: c = c.astype(np.float)  # needs to accept NaN

In [36]: c.iloc[0] = np.nan

In [36]: frame['c'] = c

In [37]: frame
Out[37]:
a b c
0 True 25 NaN
1 False 22 44
2 True 55 55
3 False 35 70

关于python - 根据尾随行在 Pandas 数据框中进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17966315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com