我有一个包含3列的 Dataframe :一米零一米零一米零一米零一米零一米零一米零一米零一米零二米零一米零。
我需要创建一个新列new_name
,其中新名称将设置为第一个name
,其中reset_flag=True
,然后它将继续使用该名称WITHIN该会话,直到出现新的reset_flag
。
不太确定最好的接近方式。
编辑:我想到了一个方法,用df. iterrows()来实现,先存储到list中,然后再追加,但看起来很笨重。有没有更有效的"panda"方法?
样本预期输出
| 会话标识|姓名|重置标志|新名称|
| - ------|- ------|- ------|- ------|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名1|正确|某人姓名1|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名1||某人姓名1|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名1||某人姓名1|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名2|正确|某人姓名2|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名2||某人姓名2|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名2||某人姓名2|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名3||某人姓名2|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名3||某人姓名2|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名4||某人姓名2|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名4||某人姓名2|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名4||某人姓名2|
| 06c97a-bc7 - 6cc-29f-65978ee8d型柴油机|某人姓名5|正确|某人姓名5|
| 小行星3943|某人姓名1|正确|某人姓名1|
| 小行星3943|某人姓名1||某人姓名1|
| 小行星3943|某人姓名1||某人姓名1|
| 小行星3943|某人姓名2||某人姓名1|
| 小行星3943|某人姓名2||某人姓名1|
| 小行星3943|某人姓名2||某人姓名1|
| 小行星3943|某人姓名3|正确|某人姓名3|
| 小行星3943|某人姓名3||某人姓名3|
| 小行星3943|某人姓名4||某人姓名3|
| 小行星3943|某人姓名4||某人姓名3|
| 小行星3943|某人姓名4||某人姓名3|
| 小行星3943|某人姓名5|正确|某人姓名5|
| 小行星3943|某人姓名6||某人姓名5|
3条答案
按热度按时间eaf3rand1#
应用新名称,然后填写
y3bcpkx12#
一种有效的方法是在“reset_flag”列上使用
cumsum
:这将为您提供一列数字,这些数字在每次遇到True
时增加。然后,您可以简单地按此列进行分组,以获得所需的结果(我假设您的“reset_flag”列是布尔值):
6ie5vjzr3#
不确定是否有更有效的方法,但这应该工作: