[python] 목록에서 데이터 프레임에 열 추가
다음과 같은 일부 열이있는 데이터 프레임이 있습니다.
A B C
0
4
5
6
7
7
6
5
A의 값의 가능한 범위가 0 내지 7 만한다 .
또한 다음과 같은 8 개의 요소 목록이 있습니다.
List=[2,5,6,8,12,16,26,32] //There are only 8 elements in this list
A 열의 요소가 n 이면 List 의 n 번째 요소를 새 열에 삽입해야합니다 ( 예 : ‘D’).
전체 데이터 프레임을 반복하지 않고 한 번에 어떻게 할 수 있습니까?
결과 데이터 프레임은 다음과 같습니다.
A B C D
0 2
4 12
5 16
6 26
7 32
7 32
6 26
5 16
참고 : 데이터 프레임은 방대하며 반복은 마지막 옵션입니다. 그러나 필요한 경우 dict와 같은 다른 데이터 구조에서 ‘List’의 요소를 정렬 할 수도 있습니다.
답변
IIUC, (불행히도 이름이 붙은) List
를으로 ndarray
만들면 자연스럽게 색인화 할 수 있습니다.
>>> import numpy as np
>>> m = np.arange(16)*10
>>> m[df.A]
array([ 0, 40, 50, 60, 150, 150, 140, 130])
>>> df["D"] = m[df.A]
>>> df
A B C D
0 0 NaN NaN 0
1 4 NaN NaN 40
2 5 NaN NaN 50
3 6 NaN NaN 60
4 15 NaN NaN 150
5 15 NaN NaN 150
6 14 NaN NaN 140
7 13 NaN NaN 130
여기에서 새로운 m
을 만들었지 만을 사용 m = np.asarray(List)
하면 똑같은 방식으로 작동합니다.의 값은 df.A
의 적절한 요소를 선택합니다 m
.
당신이 이전 버전을 사용하는 경우주의 numpy
, 당신이 사용해야 할 수도 있습니다 m[df.A.values]
, 과거에 instead– numpy
다른 사람들과 잘 재생되지 않았고, 몇 가지 리팩토링 pandas
인한 약간의 두통. 이제 상황이 개선되었습니다.
답변
목록을 직접 할당하십시오.
df['new_col'] = mylist
대안
목록을 시리즈 또는 배열로 변환 한 다음 할당합니다.
se = pd.Series(mylist)
df['new_col'] = se.values
또는
df['new_col'] = np.array(mylist)
답변
@sparrow의 훌륭한 솔루션을 개선하는 솔루션입니다.
하자 DF , 데이터 세트를, 그리고 myList에 당신이 dataframe에 추가 할 값 목록을.
새 열을 간단히 new_column 이라고 부르고 싶다고 가정 해 보겠습니다.
먼저 목록을 시리즈로 만듭니다.
column_values = pd.Series(mylist)
그런 다음 삽입 기능을 사용하여 열을 추가하십시오. 이 기능은 기둥을 배치 할 위치를 선택할 수있는 장점이 있습니다. 다음 예에서는 왼쪽에서 첫 번째 위치에 새 열을 배치합니다 (loc = 0으로 설정).
df.insert(loc=0, column='new_column', value=column_values)
답변
먼저 보유한 데이터 프레임을 생성하겠습니다. B 열과 C 열은 관련이 없으므로 무시하겠습니다.
df = pd.DataFrame({'A': [0, 4, 5, 6, 7, 7, 6,5]})
그리고 원하는 매핑 :
mapping = dict(enumerate([2,5,6,8,12,16,26,32]))
df['D'] = df['A'].map(mapping)
끝난!
print df
산출:
A D
0 0 2
1 4 12
2 5 16
3 6 26
4 7 32
5 7 32
6 6 26
7 5 16
답변
오래된 질문; 하지만 저는 항상 가장 빠른 코드를 사용하려고합니다!
나는 6,900 만 개의 uint64가있는 거대한 목록을 가지고 있었다. np.array () 가 가장 빠릅니다.
df['hashes'] = hashes
Time spent: 17.034842014312744
df['hashes'] = pd.Series(hashes).values
Time spent: 17.141014337539673
df['key'] = np.array(hashes)
Time spent: 10.724546194076538