2017-03-02 5 views
1

내 워크 플로에는 4 개의 열이있는 복수의 CSV가 있습니다 OID, value, count, unique_id. 나는 unique_id 컬럼 아래에서 증가 값을 생성하는 방법을 알아 내려고하고있다. apply()을 사용하면 df.apply(lambda x : x + 1) #where x = 0과 같은 작업을 수행 할 수 있으며 unique_id 아래의 모든 값이 1이됩니다. 그러나 apply()을 사용하여 특정 열의 각 행에 점진적으로 값을 생성하는 방법에 대해 혼란 스럽습니다.Pandas Dataframe - 증분 값 생성

# 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 

샘플 코드 (I 구문이 잘못 이해하지만, 내가 달성하기 위해 노력하고있는 무슨 약) :

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

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

당신이'안양은 [ 'UNIQUE_ID'] = np.arange은 (df.shape [0])' – EdChum

답변

1

루프를하지 그냥 직접에 NumPy와 배열을 할당 할 수 있습니다 np.arange를 사용하여 여기서, ID를 생성하고 여기 RangeIndex를 사용 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 

순수 팬더 방법 될 행 NUM 합격 기본 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 기능이 Pandas보다 선호됩니까? 또는 그들은 꽤 유사합니까? 또한, 'df ['unique_id '] = pd.RangeIndex (stop = df.shape [0])'나에게'AttributeError :'module '객체에'RangeIndex '속성이 없습니다. 어떤 생각? 이전에 색인을 사용하여 반복 할 수있었습니다. – cptpython

+0

'pdf로 가져 오기 pandas '를 추가해야 할 수도 있습니다. 일반적으로별로 다르지 않지만 numpy 메소드가 더 빨라서 원하는 부분을 선호해야합니다. – EdChum

+0

문제점을 발견했습니다. 이전 버전을 사용하고 있습니다. 직장에서 판다. 또한, 다음과 같은'np.arange' 문법을 사용하지 않는 이유를 지적 할 수 있겠습니까? df [ 'unique_id'] = np.arange (57)'이 오류를 throw합니다 : 'ValueError : 값의 길이가 인덱스의 길이와 일치하지 않습니다.' ? – cptpython