python - 如何从数据框中的另一列按条件创建新的组?
问题描述
所以我有这样的数据
data = [['A', 0], ['A', 1], ['A', 2], ['A', 15], ['A', 2], ['A', 12],['B',1],['B',3]]
df = pd.DataFrame(data, columns = ['name', 'interval'])
name interval
0 A 0
1 A 1
2 A 2
3 A 15
4 A 2
5 A 12
6 B 1
7 B 3
所以我想根据间隔创建一个新名称(如果间隔>10,则生成新名称)但仍然使用以前的名称(这只是一个示例名称)
name interval new_name
0 A 0 A_0
1 A 1 A_0
2 A 2 A_0
3 A 15 A_1
4 A 2 A_1
5 A 12 A_2
6 B 1 B_0
7 B 3 B_0
我当前的代码正在使用 for 访问每一行,还有其他想法来处理它吗?谢谢
######################
感谢 Rutger 的想法。这是流程怎么做
name interval condition cumsum new_name(name+"_"+cumsum)
0 A 0 False 0 A_0
1 A 1 False 0 A_0
2 A 2 False 0 A_0
3 A 15 True 1 A_1
4 A 2 False 1 A_1
5 A 12 True 2 A_2
6 B 1 False 0 B_0
7 B 3 False 0 B_0
代码的详细信息在 Rutger 的回答中
解决方案
我认为最简单的方法是从创建 bool 系列开始,然后像这样创建新字段:
df['large_interval'] = 10 < df['interval']
df['new_name'] = df['name'] + '_' + df.groupby('name')['large'].cumsum().astype(str)
在第二行,它计算每组经过了多少大间隔。该值用作字符串并在名称和_之后添加。
推荐阅读
- c# - 用另一个值/标记替换查询参数
- arrays - 萨斯 | 用于处理数组的 Mixin
- laravel - 声明一条路线会覆盖另一条路线
- python - TensorFlow 导入模型和运行预测生成“无法将元素作为字节获取”InternalError
- url - Notes 客户端中的 Xpages context.getUrl() 忽略反斜杠“/”
- c# - 如何使用 Microsoft.Azure.Management.BotService SDK 注册 Facebook 频道
- .net - 找不到 WCF 服务资源
- cassandra-3.0 - 我应该如何设计 Cassandra 表?
- sitecore - Sitecore 9 xconnect 错误:Sitecore.XConnect.XdbCollectionUnavailableException,禁止
- authentication - 使用 slack 登录的预期行为