看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)有以下 DataFrame 名为 df,从 A 列的第一个数据开始,每次取三个连续的数据(不够三个按当前小于三个的数据算),找出这三个数据中的最大值,并找到这个最大值在B列中对应的值。产生新 C 列数据。
import pandas as pd
df = pd.DataFrame({
'A': [10, 20, 15, 30, 25, 40, 35, 50, 45],
'B': [1, 2, 3, 4, 5, 6, 7, 8, 9]
})
df
'''
A B
0 10 1
1 20 2
2 15 3
3 30 4
4 25 5
5 40 6
6 35 7
7 50 8
8 45 9
'''
即结果为:
'''
A B C
0 10 1 1
1 20 2 2
2 15 3 2
3 30 4 4
4 25 5 4
5 40 6 6
6 35 7 6
7 50 8 8
8 45 9 8
'''
如果用迭代输出:
for i in df.rolling(3):
print(i[i.A == i.A.max()].B.iat[0])
'''
1
2
2
4
4
6
6
8
8
'''
用 Series 的 map 进行迭代操作:
pd.Series(df.rolling(3)).map(lambda i: i[i.A == i.A.max()].B.iat[0])
'''
0 1
1 2
2 2
3 4
4 4
5 6
6 6
7 8
8 8
dtype: int64
'''
最终 Python 代码如下:
df.assign(
C=pd.Series(df.rolling(3))
.map(lambda i: i[i.A == i.A.max()].B.iat[0])
)
'''
A B C
0 10 1 1
1 20 2 2
2 15 3 2
3 30 4 4
4 25 5 4
5 40 6 6
6 35 7 6
7 50 8 8
8 45 9 8
'''
查看相关链接中的知识。
(完)
更新时间:2024-08-29 16:13:03 标签:pandas python 习题 最大值 移动窗口