다음과 같은 데이터 프레임이 있습니다.
### To Stack
df_stack = pd.DataFrame([['SGA', 'FT', 5.6994352340698242],
['SGA', 'ST', 1.518241786956787],
['EXT', 'FT', 20.853669309616087],
['EXT', 'ST', 3.5596847057342529],
['LGT', 'FT', 9.853669309616087],
['LGT', 'ST', 8.5596847057342529]], columns = (('idobj','description','value')))
df_stack
idobj description value
SGA FT 5.69944
SGA ST 1.51824
EXT FT 20.85367
EXT ST 3.55968
LGT FT 9.85367
LGT ST 8.5596
나는 (예를 들어, 적용 데이터의 부분에 최소 - 최대 스케일링을 적용 할 필요가 MinMaxScaler
에 'Description'='ST'
다음 적용 MinMaxScaler
에 'Description'='ST'
).
MinMaxScaler
이 방법으로 각 "설명"을 신청할 때 :
scaler.fit(df_stack[(df_stack['description']=='FT')]['value'].values.reshape(-1,1))
scaler.transform(df_stack[(df_stack['description']=='FT')]['value'].values.reshape(-1,1))
array([[0. ],
[1. ],
[0.27413]])
scaler.fit(df_stack[(df_stack['description']=='ST')]['value'].values.reshape(-1,1))
scaler.transform(df_stack[(df_stack['description']=='ST')]['value'].values.reshape(-1,1))
array([[0. ],
[0.28992],
[1. ]])
내 "설명"과의 서신을 잃게됩니다.
다음과 같은 새 열을 추가하여 수동으로 계산하려고했습니다.
df_stack['description_norm'] = (df_stack[(df_stack['description']=='FT')]['value']-\
df_stack[(df_stack['description']=='FT')]['value'].min())/\
(df_stack[(df_stack['description']=='FT')]['value'].max()-\
df_stack[(df_stack['description']=='FT')]['value'].min())
하지만 또 다른 칼럼이 있습니다.
idobj description value description_norm
0 SGA FT 5.69944 0.00000
1 SGA ST 1.51824 NaN
2 EXT FT 20.85367 1.00000
3 EXT ST 3.55968 NaN
4 LGT FT 9.85367 0.27413
5 LGT ST 8.55968 NaN
그리고이 새 열의 값을 'FT'조건에 따라 변수 'Description'에 할당하려고하면 단순히 작동하지 않습니까?!?
df_stack[(df_stack['description']=='FT')]['value']=df_stack[(df_stack['description']=='FT')]['description_norm']
내가 무엇을 놓치고 있습니까?
예상 결과는 다음과 같아야합니다.
idobj description value
SGA FT 0
SGA ST 0
EXT FT 1
EXT ST 0.28992
LGT FT 0.27413
LGT ST 1
어떤 아이디어라도 환영합니다.
원하는 것은 다른 열의 값을 기반으로 한 열에 함수를 적용하는 것입니다 .pandas에서이를 수행하는 가장 좋은 방법은 groupby
.
이 경우 다음과 같이 수동으로 확장 할 수 있습니다.
df_stack['value'] = df_stack.groupby('description')['value'].\
apply(lambda x: (x-x.min())/(x.max()-x.min()))
또는 사용하여 MinMaxScaler
:
df_stack['value'] = df_stack.groupby('description')['value'].\
transform(lambda x: MinMaxScaler().fit_transform(x.values.reshape(-1,1)).flatten())
둘 다 동일한 결과를 제공합니다.
idobj description value
0 SGA FT 0.000000
1 SGA ST 0.000000
2 EXT FT 1.000000
3 EXT ST 0.289918
4 LGT FT 0.274130
5 LGT ST 1.000000
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다