다음과 같은 데이터 데이터 프레임이 있습니다.
df = pandas.DataFrame(index=pandas.date_range('20200101', '20200107'),
columns=['foo', 'bar', 'baz'],
data=numpy.random.rand(7,3))
print(df) foo bar baz 2020-01-01 0.641336 0.185073 0.815814 2020-01-02 0.616637 0.438274 0.750864 2020-01-03 0.336463 0.548659 0.661161 2020-01-04 0.924278 0.560541 0.341154 2020-01-05 0.608545 0.674169 0.242851 2020-01-06 0.459625 0.816147 0.113926 2020-01-07 0.781475 0.865262 0.625729
각 열에 대한 또 다른 요인 데이터 프레임이 있습니다.
fac = pandas.DataFrame(index=['foo','bar','baz'],
data={'factor':[1,2,3]})
print(fac) factor foo 1 bar 2 baz 3
각 열의 계수로 나눈 각 행의 로그를 계산하고 싶습니다.
와 비슷하다:
numpy.log(df['foo']) / fac['foo'] # for each column, foo, bar, baz
의 복사본을 만든 df
다음 각 열을 반복하여 복사 된 데이터 프레임의 값을 계산하려는 식의 결과로 설정 하는 다음 솔루션을 찾았습니다 .
res = df.copy()
for c in df.columns:
res[c] = numpy.log(df[c]) / fac.loc[c].values
print(res) foo bar baz 2020-01-01 -0.444202 -0.843503 -0.067856 2020-01-02 -0.483475 -0.412456 -0.095510 2020-01-03 -1.089267 -0.300139 -0.137919 2020-01-04 -0.078743 -0.289427 -0.358474 2020-01-05 -0.496685 -0.197138 -0.471769 2020-01-06 -0.777345 -0.101580 -0.724067 2020-01-07 -0.246572 -0.072361 -0.156279
작동하지만 인체 공학적으로 느껴지지는 않습니다.
동일한 것을 달성하는 더 좋고 권장되는 방법이 있습니까 (이상적으로는 한 줄로)?
데이터 프레임을 시리즈로 나눌 수 있습니다. 그렇게함으로써 Pandas는 데이터 프레임의 열을 시리즈의 인덱스에 정렬합니다. 따라서 이것은 다음과 같이 할 수 있습니다.
np.log(df)/fac['factor']
산출:
foo bar baz
2020-01-01 -0.444202 -0.843502 -0.067856
2020-01-02 -0.483475 -0.412455 -0.095510
2020-01-03 -1.089267 -0.300139 -0.137919
2020-01-04 -0.078742 -0.289426 -0.358474
2020-01-05 -0.496684 -0.197137 -0.471769
2020-01-06 -0.777344 -0.101580 -0.724069
2020-01-07 -0.246572 -0.072361 -0.156279
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다