[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


답변