>source

다른 데이터 프레임의 값을 기반으로 기존 데이터 프레임에 새 열을 만들려고합니다.

# Define a dataframe containing 2 columns Date-Year and Date-Qtr
data1 = {'Date-Year': [2015, 2015, 2015, 2015, 2016, 2016, 2016, 2016, 2017, 2017], 
        'Date-Qtr': ['2015Q1', '2015Q2', '2015Q3', '2015Q4', '2016Q1', '2016Q2', '2016Q3', '2016Q4', '2017Q1', '2017Q2']} 
dfx = pd.DataFrame(data1)
# Define another dataframe containing 2 columns Date-Year and Interest Rate
data2 = {'Date-Year': [2000, 2015, 2016, 2017, 2018, 2019, 2020, 2021], 
        'Interest Rate': [0.00, 8.20, 8.20, 7.75, 7.50, 7.50, 6.50, 6.50]} 
dfy = pd.DataFrame(data2)
# Add 1 more column to the first dataframe
dfx['Int-rate'] = float(0)

dfx에 대한 출력

  Date-Year Date-Qtr  Int-rate
0       2015   2015Q1       0.0
1       2015   2015Q2       0.0
2       2015   2015Q3       0.0
3       2015   2015Q4       0.0
4       2016   2016Q1       0.0
5       2016   2016Q2       0.0
6       2016   2016Q3       0.0
7       2016   2016Q4       0.0
8       2017   2017Q1       0.0
9       2017   2017Q2       0.0

dfy 출력

Date-Year  Interest Rate
0       2000           0.00
1       2015           8.20
2       2016           8.20
3       2017           7.75
4       2018           7.50
5       2019           7.50
6       2020           6.50
7       2021           6.50

이제 2 개의 FOR 루프를 통해 달성하고있는 해당 연도에 대해 dfy에서 '이자율'값을 선택하여 dfx의 'Int-rate'열을 업데이트해야합니다.

#Check the year from dfx - goto dfy - check the interest rate from dfy for that year and modify Int-rate of dfx with this value
for i in range (len(dfx['Date-Year'])):
    for j in range (len(dfy['Date-Year'])):
        if (dfx['Date-Year'][i] == dfy['Date-Year'][j]):
            dfx['Int-rate'][i] = dfy['Interest Rate'][j]

원하는 출력을 얻습니다.

 Date-Year Date-Qtr  Int-rate
0       2015   2015Q1      8.20
1       2015   2015Q2      8.20
2       2015   2015Q3      8.20
3       2015   2015Q4      8.20
4       2016   2016Q1      8.20
5       2016   2016Q2      8.20
6       2016   2016Q3      8.20
7       2016   2016Q4      8.20
8       2017   2017Q1      7.75
9       2017   2017Q2      7.75

동일한 결과를 얻을 수있는 방법이 있습니까?

  • 선언하지 않고 dfx['Int-rate'] = float(0) . 나는 KeyError: 'Int-rate' 이것을 선언하지 않으면

  • 2 개의 FOR 루프에 만족하지 않습니다. 더 나은 방법으로 수행 할 수 있습니까 (맵 사용, 병합 또는 조인 사용)

  • 나는 다른 게시물을 살펴 보았고 내가 찾은 가장 좋은 것은여기,지도를 사용해 보았지만 할 수 없었습니다. 어떤 도움을 주시면 감사하겠습니다

    감사

    • 답변 # 1

      사전으로 바꾸기를 사용할 수 있습니다.

      dfx['Int-Rate'] = dfx['Date-Year'].replace(dict(dfy.to_numpy()))
      print(dfx)
      
      

      산출

        Date-Year Date-Qtr  Int-Rate
      0       2015   2015Q1      8.20
      1       2015   2015Q2      8.20
      2       2015   2015Q3      8.20
      3       2015   2015Q4      8.20
      4       2016   2016Q1      8.20
      5       2016   2016Q2      8.20
      6       2016   2016Q3      8.20
      7       2016   2016Q4      8.20
      8       2017   2017Q1      7.75
      9       2017   2017Q2      7.75
      
      

      또는 시리즈를 대안으로 사용 :

      dfx['Int-Rate'] = dfx['Date-Year'].replace(dfy.set_index('Date-Year').squeeze())
      
      

    • 답변 # 2

      당신은 단순히 사용할 수 있습니다 df.merge :

      In [4448]: df = dfx.merge(dfy).rename(columns={'Interest Rate':'Int-rate'})
      In [4449]: df
      Out[4449]: 
         Date-Year Date-Qtr  Int-rate
      0       2015   2015Q1      8.20
      1       2015   2015Q2      8.20
      2       2015   2015Q3      8.20
      3       2015   2015Q4      8.20
      4       2016   2016Q1      8.20
      5       2016   2016Q2      8.20
      6       2016   2016Q3      8.20
      7       2016   2016Q4      8.20
      8       2017   2017Q1      7.75
      9       2017   2017Q2      7.75
      
      

    관련 자료

  • 이전 c - 부동 소수점과의 비교 문제
  • 다음 python - 다중 처리에서 osgetpid의 고유성