我正在嘗試在日期和名為 IDV 的列上合并兩個 DataFrame。這是我的第一個 DataFrame
df1
| 日期 | IDV | 價值觀 |
|---|---|---|
| 2020 年 1 月 1 日 | 變數1 | 100 |
| 2020 年 1 月 1 日 | 變數2 | 500 |
| 2020 年 1 月 1 日 | 變數 3 | 600 |
| 2020 年 1 月 1 日 | 變數4 | 10 |
| 2020 年 1 月 1 日 | 變數5 | 10 |
df2
| 日期 | IDV | 價值觀 |
|---|---|---|
| 2019 年 1 月 1 日 | 變數2 | 110 |
| 2019 年 1 月 1 日 | 變數 3 | 510 |
| 2019 年 1 月 1 日 | 變數1 | 300 |
| 2019 年 1 月 1 日 | 變數5 | 20 |
| 2019 年 1 月 1 日 | 變數4 | 20 |
我想要的輸出是
| 日期 | IDV | 價值觀 | Last_Year_Values |
|---|---|---|---|
| 2020 年 1 月 1 日 | 變數1 | 100 | 300 |
| 2020 年 1 月 1 日 | 變數2 | 500 | 110 |
| 2020 年 1 月 1 日 | 變數 3 | 600 | 510 |
| 2020 年 1 月 1 日 | 變數4 | 10 | 20 |
| 2020 年 1 月 1 日 | 變數5 | 10 | 20 |
我試過了pd.merge(df1,df2,left_on ='date',right_on ='IDV', how = 'left')
uj5u.com熱心網友回復:
使用DateOffsetif Dateis already datetime64:
cols = ['Date', 'IDV', 'Values']
out = df1.merge(df2[cols].assign(Date=df2['Date'] pd.DateOffset(years=1)),
on=['Date', 'IDV'], how='left', suffixes=('', '_last_year'))
print(out)
# Output
Date IDV Values Values_last_year
0 2020-01-01 Var1 100 300
1 2020-01-01 Var2 500 110
2 2020-01-01 Var3 600 510
3 2020-01-01 Var4 10 20
4 2020-01-01 Var5 10 20
設定:
import pandas as pd
d1 = {'Date': [pd.Timestamp('2020-01-01'),
pd.Timestamp('2020-01-01'),
pd.Timestamp('2020-01-01'),
pd.Timestamp('2020-01-01'),
pd.Timestamp('2020-01-01')],
'IDV': ['Var1', 'Var2', 'Var3', 'Var4', 'Var5'],
'Values': [100, 500, 600, 10, 10]}
df1 = pd.DataFrame(d1)
d2 = {'Date': [pd.Timestamp('2019-01-01'),
pd.Timestamp('2019-01-01'),
pd.Timestamp('2019-01-01'),
pd.Timestamp('2019-01-01'),
pd.Timestamp('2019-01-01')],
'IDV': ['Var2', 'Var3', 'Var1', 'Var5', 'Var4'],
'Values': [110, 510, 300, 20, 20]}
df2 = pd.DataFrame(d2)
uj5u.com熱心網友回復:
假設是字串型別,一個簡單的方法是更改?? df2 中的年份:
pd.merge(df1,
df2.assign(Date=df2['Date'].str.replace('2019', '2020')),
on=['Date', 'IDV'],
how='left', suffixes=('', '_last_year'))
或更通用的方法(適用于任何年份):
pd.merge(df1,
df2.assign(Date=df2['Date'].str.replace(r'\d $', lambda m: str(int(m.group(0)) 1), regex=True)),
on=['Date', 'IDV'],
how='left', suffixes=('', '_last_year'))
輸出:
Date IDV Values Values_last_year
0 01/01/2020 Var1 100 300
1 01/01/2020 Var2 500 110
2 01/01/2020 Var3 600 510
3 01/01/2020 Var4 10 20
4 01/01/2020 Var5 10 20
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449605.html
上一篇:大熊貓加入組中的字串,跳過na值
