source

목록에서 데이터 프레임에 열 추가

factcode 2023. 6. 8. 22:38
반응형

목록에서 데이터 프레임에 열 추가

다음과 같은 열이 있는 데이터 프레임이 있습니다.

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이면 목록의 n번째 요소를 새 열에 삽입해야 합니다(예: 'D').

전체 데이터 프레임을 루프하지 않고 한 번에 수행할 수 있는 방법은 무엇입니까?

결과 데이터 프레임은 다음과 같습니다.

A   B   C   D
0           2
4           12
5           16
6           26
7           32
7           32
6           26
5           16

참고: 데이터 프레임은 방대하며 반복이 마지막 옵션입니다.그러나 필요한 경우 dict와 같은 다른 데이터 구조의 'List' 요소도 정렬할 수 있습니다.

목록을 직접 할당하기만 하면 됩니다.

df['new_col'] = mylist

대안
목록을 시리즈 또는 배열로 변환한 다음 다음을 할당합니다.

se = pd.Series(mylist)
df['new_col'] = se.values

또는

df['new_col'] = np.array(mylist)

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]대신에... 과거에는numpy다른 사람들과 잘 놀지 못했고, 일부는 리팩터링했습니다.pandas두통을 일으켰습니다.지금은 상황이 나아졌습니다.

@sparrow의 훌륭한 솔루션을 개선하는 솔루션.

데이터 프레임에 추가할 값이 포함된 목록을 데이터 세트로 지정합니다.

새 열을 단순히 new_column으로 부르고 싶다고 가정합니다.

먼저 목록을 시리즈로 만듭니다.

column_values = pd.Series(mylist)

그런 다음 삽입 함수를 사용하여 열을 추가합니다.이 기능을 사용하면 열을 배치할 위치를 선택할 수 있습니다.다음 예제에서는 새 열을 왼쪽에서 첫 번째 위치에 배치합니다(loc=0 설정).

df.insert(loc=0, column='new_column', value=column_values)

오래된 질문입니다. 하지만 저는 항상 가장 빠른 코드를 사용하려고 노력합니다!

저는 6,900만 unt64의 거대한 목록을 가지고 있었습니다. 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

먼저 당신이 가지고 있던 데이터 프레임을 생성해 보겠습니다, 열 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

다음을 사용할 수도 있습니다.

In [1559]: df
Out[1559]: 
   A   B   C
0  0 NaN NaN
1  4 NaN NaN
2  5 NaN NaN
3  6 NaN NaN
4  7 NaN NaN
5  7 NaN NaN
6  6 NaN NaN
7  5 NaN NaN

In [1560]: mylist = [2,5,6,8,12,16,26,32]

In [1567]: df = df.assign(D=mylist)

In [1568]: df
Out[1568]: 
   A   B   C   D
0  0 NaN NaN   2
1  4 NaN NaN   5
2  5 NaN NaN   6
3  6 NaN NaN   8
4  7 NaN NaN  12
5  7 NaN NaN  16
6  6 NaN NaN  26
7  5 NaN NaN  32

언급URL : https://stackoverflow.com/questions/26666919/add-column-in-dataframe-from-list

반응형