我正在尝试为数据框内的数据子集创建订单号。对于新列(“strike_order”,我想检查“option_expiration”列的值是否等于上面一行中“option_expiration”列的值。如果它不相等(即新子集)设置值“ strike_order“到1.如果相等,则将值设置为上一行”strike_order“+1。
我在Jupyter的错误消息底部得到的错误是KeyError:'标签[06/15/2001]不在[index]'
示例:
def compare(i):
for i in df.loc[i,"source_column"]:
if i <1 :
return 1 #populates first row as 1
elif df.loc[i,"source_column"] == df.loc[i-
1,"source_column"]:
return compare(i-1) +1
else:
return 1
df["desired_output"]=df["source_column"].apply(compare)
即当源列更改值时,它会在输出列
中触发1的新计数我的代码如下:
git describe --match
答案 0 :(得分:0)
您可以使用rank()
df = pd.DataFrame({'source_column': [2,2,2,2,4,4]})
df['strike_order'] = df.groupby('source_column').source_column.rank(method = 'first')\
.astype(int)
你得到了
source_column strike_order
0 2 1
1 2 2
2 2 3
3 2 4
4 4 1
5 4 2
答案 1 :(得分:0)
你可以直接这样称为累积计数。
df['new'] = df.groupby('source_column').cumcount()+1
source_column desired_output new 0 2 1 1 1 2 2 2 2 2 3 3 3 2 4 4 4 4 1 1 5 4 2 2 In [453]: