2017-03-02 57 views
1

在我的工作流程有四列OID, value, count, unique_id多的CSV。我正試圖計算如何在unique_id列下生成增量值。使用apply(),我可以這樣做df.apply(lambda x : x + 1) #where x = 0,這將導致所有的值下unique_id爲1。但是,我對如何使用apply()產生增量每行中的特定列的值相混淆。熊貓據幀 - 生成增量值

# Current Dataframe 
    OID Value Count unique_id 
0 -1  1  5   0 
1 -1  2  46   0 
2 -1  3  32   0 
3 -1  4  3   0 
4 -1  5  17   0 

# Trying to accomplish 
    OID Value Count unique_id 
0 -1  1  5   0 
1 -1  2  46   1 
2 -1  3  32   2 
3 -1  4  3   3 
4 -1  5  17   4 

示例代碼(我的理解是語法不正確,但它大約是什麼,我試圖完成):

def numbers(): 
    for index, row in RG_Res_df.iterrows(): 
     return index 

RG_Res_df = RG_Res_df['unique_id'].apply(numbers) 
+1

你可以做'DF [ 'UNIQUE_ID'] = np.arange(df.shape [0])' – EdChum

回答

1

不循環,您只要直接分配numpy的數組產生的ID,這裏使用np.arange和通過的行使用RangeIndex,這裏的num的,這將是df.shape[0]

In [113]: 
df['unique_id'] = np.arange(df.shape[0]) 
df 

Out[113]: 
    OID Value Count unique_id 
0 -1  1  5   0 
1 -1  2  46   1 
2 -1  3  32   2 
3 -1  4  3   3 
4 -1  5  17   4 

或純大熊貓方法默認start0,所以我們只需要通過stop=df.shape[0]

In [114]: 
df['unique_id'] = pd.RangeIndex(stop=df.shape[0]) 
df 

Out[114]: 
    OID Value Count unique_id 
0 -1  1  5   0 
1 -1  2  46   1 
2 -1  3  32   2 
3 -1  4  3   3 
4 -1  5  17   4 
+0

這美麗的工作。 Numpy函數是否優於熊貓?還是他們相當可比?此外,'DF [ 'UNIQUE_ID'] = pd.RangeIndex(停止= df.shape [0])'給我'AttributeError的: '模塊' 對象沒有屬性「RangeIndex''。任何想法?我能夠更早地使用它的索引進行迭代。 – cptpython

+0

您可能需要添加'導入熊貓作爲PD'一般也沒有太大的不同,但numpy方法會更快,所以它應該是首選它在哪裏做你想要的東西 – EdChum

+0

我發現問題,我使用舊版本工作中的熊貓。此外,你可以指出爲什麼不下面的'np.arange'語法:'DF [「UNIQUE_ID」] = np.arange(57)'拋出這個錯誤:'ValueError異常:值的長度不符合index'的長度? – cptpython