나가 수에서 다를 수 있습니다 열 사이의 비교를 기반으로 팬더의 열을 만들려고 해요이 할 수있는 가장 빠른, 가장 깨끗한 방법을 생각하는 것을 시도하고있다 :팬더 비교
id date birth_date_1 birth_date_2
1 1/1/2000 1/3/2000 1/5/2000
1 1/7/2000 1/3/2000 1/5/2000
2 1/2/2000 1/10/2000 1/1/2000
2 1/5/2000 1/10/2000 1/1/2000
3 1/4/2000 NaT NaT
을
id date birth_date_1 birth_date_2 num_born_before_date
1 1/1/2000 1/3/2000 1/5/2000 0
1 1/7/2000 1/3/2000 1/5/2000 2
2 1/2/2000 1/10/2000 1/1/2000 1
2 1/5/2000 1/10/2000 1/1/2000 1
3 1/4/2000 NaT NaT 0
주의해야 할 점은 birth_date 컬럼의 수를 실행하는 실행에 따라 다를 것입니다 :
나는 현재 날짜 이전에 출생 날짜의 수를 계산 새 열을 생성하는 것을 목표로하고 있습니다. 나는 광란하게 느려질 것이므로 엔트리를 반복하고 싶지 않다 ...
편집 : np.where
을 사용하여 약간 더러운 해킹이 일어났다. 특히 NaT를 다루는 측면에서이 작업을 수행하는 더 좋은 방법이 있는지 확실하지 않습니다.
NAT2 = pd.to_datetime('01-01-2100') # need this to deal with NaTs
df = df.fillna(NAT2)
df['num_born'] = 0
created_cols = [c for c in df.columns if 'birth_date' in c]
for col in created_cols:
df['num_born'] = np.where((df['date'] >= df[col]),
df['num_born'] + 1, df['num_born'])
df = df.replace(to_replace=NAT2, value=pd.NaT)
을 와우. 너무 우아한, 고마워! 이것은 df [ 'date']가 NaT 값보다 큰 것으로 계산되는 문제를 다루지 않습니다. NaT를 정말 높은 날짜로 대체하는 대안은 무엇입니까? – Luke
아, 네, NaT와의 비교가 항상 거짓이라고 가정했을 것입니다. 버그 같아. 더 높은 날짜로 바꾸는 당신의 방법은 나에게 괜찮은 것 같습니다. – joris
이상한 NaT 동작에 관한 문제를 제출했습니다 : https://github.com/pydata/pandas/issues/9005 – joris