通过比较列和行来创建子集订单

时间:2017-10-14 04:42:26

标签: pandas dataframe operation

我正在尝试为数据框内的数据子集创建订单号。对于新列(“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

2 个答案:

答案 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]: