gpt4 book ai didi

python - 根据另一个系列,带有旗帜的新 Pandas 系列

转载 作者:行者123 更新时间:2023-12-04 15:16:55 25 4
gpt4 key购买 nike

我有一个类似这样的数据框:

>>> d = {'ID': ['ID1', 'ID2', 'ID3', 'ID4', 'ID5', 'ID6', 'ID7', 'ID8', 'ID9', 'ID10'], 
'A': [1, 1, 1, 1, 2, 2, 2, 2, 2, 2],
'B': [145,158,240,250,199,204,300,350,467,578]}
>>> df = pd.DataFrame(data=d)

我想创建一个新系列,F , 标记每 100 个单位的列 B (从 B 列的第一个值开始计数,而不是从 0 开始计数)。列中的数字 B “重新启动”列中的每个数字 A .对于 A 列中的新数字,它应该启动一个新标志并从列 B 中获取相应的值作为新范围 100 的第一个数字。澄清一下,这种情况的预期结果是:

>>> outcome = {'ID': ['ID1', 'ID2', 'ID3', 'ID4', 'ID5', 'ID6', 'ID7', 'ID8', 'ID9', 'ID10'], 
'A': [1, 1, 1, 1, 2, 2, 2, 2, 2, 2],
'B': [145,158,240,250,199,204,300,350,467,578],
'F': ['F1','F1','F1','F2','F3','F4','F4','F5','F6','F7']}
>>> outcome
A B F
ID1 1 145 F1
ID2 1 158 F1
ID3 1 240 F1
ID4 1 250 F2
ID5 2 199 F3
ID6 2 204 F3
ID7 2 300 F4
ID8 2 350 F4
ID9 2 467 F5
ID10 2 578 F6

我希望这一切都有意义,提前致谢!

最佳答案

你可以这样做:

import numpy as np

df['d100'] = df.groupby('A')['B'].diff().fillna(0)
df['d100'] = df.groupby('A')['d100'].cumsum() // 100

df['F'] = np.where(df['A'].ne(df['A'].shift()) | df['d100'].ne(df['d100'].shift()), 1, 0).cumsum()
df['F'] = 'F' + df['F'].astype(str)

df.drop('d100', axis=1, inplace=True)

输出:

     ID  A    B   F
0 ID1 1 145 F1
1 ID2 1 158 F1
2 ID3 1 240 F1
3 ID4 1 250 F2
4 ID5 2 199 F3
5 ID6 2 204 F3
6 ID7 2 300 F4
7 ID8 2 350 F4
8 ID9 2 467 F5
9 ID10 2 578 F6

关于python - 根据另一个系列,带有旗帜的新 Pandas 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64161853/

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