다음과 같은 팬더 데이터 프레임이 있다고 가정합니다.
Date Type Rate Load
0 2017-01-02 Rain 23 10
1 2017-01-02 Dry 30 15
2 2017-01-02 Rain 32 20
....
또한 cost(Type, Rate)
실수를 반환 하는 비용 함수가 있습니다.
각 행에 대해 Load
동일 Date
하고 cost()
주어진 행 보다 적은 다른 모든 행의 합계를 계산하는 새 열을 어떻게 만들 수 있습니까 ?
예를 들어 비용 함수가 다음과 같은 경우 :
def cost(Type, Rate):
if Type=='Rain':
return Rate/12
else:
return Rate/17
출력은 다음과 같습니다.
Date Type Rate Load Output
0 2017-01-02 Rain 23 10 15
1 2017-01-02 Dry 30 15 0
2 2017-01-02 Rain 32 20 15+10=25
....
최신 정보. 현재 생각하고있는 현재 방법은 cost
먼저 각 행의 를 계산 하는 새 열을 만들고 다음 단계에서 같은 날짜를 가진 각 행의 모든 레코드를 합산하는 새 열을 만드는 것입니다. 비용이 적게 듭니다. 그러나 둘 다 결합하는 더 빠른 방법이 있습니까?
다음과 df.to_records()
같이 시도해 볼 수 있습니다 .
print(df)
cost= lambda Type, Rate: Rate/12 if Type=='Rain' else Rate/17
l=[sum([j[4] for j in df.to_records() if list(j)[1]==list(i)[1] and list(i)!=list(j) and cost(list(j)[2],list(j)[3])<cost(list(i)[2],list(i)[3])]) for i in df.to_records()]
df['Output']=l
print(df)
산출:
df:
Date Type Rate Load
0 2017-01-01 Rain 23 10
1 2017-01-01 Dry 22 10
2 2017-01-01 Rain 25 10
3 2017-01-02 Dry 30 15
4 2017-01-02 Rain 32 20
df with output column:
Date Type Rate Load Output
0 2017-01-01 Rain 23 10 10
1 2017-01-01 Dry 22 10 0
2 2017-01-01 Rain 25 10 20
3 2017-01-02 Dry 30 15 0
4 2017-01-02 Rain 32 20 15
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다