Pandas 按标记记录并应用回原始数据帧
下面是一个数据框,其中包含组和一个名为input的列。Id要创建第二列,该列将标记组输入的列的第一次出现,对于组中的其余记录,将其设置为0。以下是一个例子:Pandas 按标记记录并应用回原始数据帧,pandas,pandas-groupby,Pandas,Pandas Groupby,下面是一个数据框,其中包含组和一个名为input的列。Id要创建第二列,该列将标记组输入的列的第一次出现,对于组中的其余记录,将其设置为0。以下是一个例子: original_df = pd.DataFrame({'group': ['a','a','a','b','b','c','c','c','c','c','c','c','c'], 'input': [0,1,1,0,0,0,0,0,0,1,1,1,1]}) group
original_df = pd.DataFrame({'group': ['a','a','a','b','b','c','c','c','c','c','c','c','c'],
'input': [0,1,1,0,0,0,0,0,0,1,1,1,1]})
group input
0 a 0
1 a 1
2 a 1
3 b 0
4 b 0
5 c 0
6 c 0
7 c 0
8 c 0
9 c 1
10 c 1
11 c 1
12 c 1
desired_df = pd.DataFrame({'group': ['a','a','a','b','b','c','c','c','c','c','c','c','c'],
'input': [0,1,1,0,0,0,0,0,0,1,1,1,1],
'desired_input': [0,1,0,0,0,0,0,0,0,1,0,0,0]})
group input desired_input
0 a 0 0
1 a 1 1
2 a 1 0
3 b 0 0
4 b 0 0
5 c 0 0
6 c 0 0
7 c 0 0
8 c 0 0
9 c 1 1
10 c 1 0
11 c 1 0
12 c 1 0
尝试删除重复项:
将熊猫作为pd导入
作为pd进口熊猫
df=pd.DataFrame(
{'group':['a','a','b','b','c','c','c','c','c','c','c','c'],
“输入”:[0,1,1,1,1,0,0,0,1,1,1]})
df['flag']=df[df['input'].eq(1)]\
.drop_duplicates(['group'],keep='first')['input']
df['flag']=df['flag'].fillna(0).astype(int)
打印(df)
df
:
group input flag
0 a 0 0
1 a 1 1
2 a 1 0
3 b 1 1
4 b 1 0
5 c 0 0
6 c 0 0
7 c 0 0
8 c 0 0
9 c 1 1
10 c 1 0
11 c 1 0
12 c 1 0
不幸的是,当组之间有连续的1时,此操作失败。幸运的是,结果仍然相同,当组之间有连续的1时,此操作失败。参见示例DF:original_DF=pd.DataFrame({'group':[a','a','a','b','b','c','c','c','c','c','c','c','c'],'input':[0,1,1,1,0,0,0,0,1,1,1]}好的。不同的方法。第一次我不明白你所说的组间连续1是什么意思。请看编辑。