IT박스

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

itboxs 2020. 11. 6. 07:58
반응형

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


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

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]대신 사용해야 할 수 있습니다 . 과거 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 이라고 부르고 싶다고 가정 해 보겠습니다.

First make the list into a Series:

column_values = pd.Series(mylist)

Then use the insert function to add the column. This function has the advantage to let you choose in which position you want to place the column. In the following example we will position the new column in the first position from left (by setting loc=0)

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

First let's create the dataframe you had, I'll ignore columns B and C as they are not relevant.

df = pd.DataFrame({'A': [0, 4, 5, 6, 7, 7, 6,5]})

And the mapping that you desire:

mapping = dict(enumerate([2,5,6,8,12,16,26,32]))

df['D'] = df['A'].map(mapping)

Done!

print df

Output:

   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

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

반응형