import pandas as pd
data = [['2018', '2018-03-25 01:00:00', '2018-10-28 02:00:00'],
['2019', '2019-03-31 01:00:00', '2019-10-27 02:00:00'],
['2020', '2020-03-29 01:00:00', '2020-10-25 02:00:00'],
['2021', '2021-03-28 01:00:00', '2021-10-31 02:00:00']]
df = pd.DataFrame(data, columns = ['Year', 'DST Start', 'DST End'])
df_dict = df.set_index('Year').T.to_dict('list')
data = ['2018','2019', '2019', '2019', '2019', '2020', '2020','2020', '2021']
df1 = pd.DataFrame(data, columns = ['date'])
我试图执行查找方法(为了更好的词)使用df
date
列对df_dict
中的keys
的值在df1
中创建新列,如下所示:
date col1 col2
0 2018 2018-03-25 01:00:00 2018-10-28 02:00:00
1 2019 2019-03-31 01:00:00 2019-10-27 02:00:00
2 2019 2019-03-31 01:00:00 2019-10-27 02:00:00
3 2019 2019-03-31 01:00:00 2019-10-27 02:00:00
4 2019 2019-03-31 01:00:00 2019-10-27 02:00:00
5 2020 2020-03-29 01:00:00 2020-10-25 02:00:00
6 2020 2020-03-29 01:00:00 2020-10-25 02:00:00
7 2020 2020-03-29 01:00:00 2020-10-25 02:00:00
8 2021 2021-03-28 01:00:00 2021-10-31 02:00:00
然而,我能得到的最接近的是如下所示:
df1['col1'] = df1['date'].map(df_dict)
print(df1)
date col1
0 2018 [2018-03-25 01:00:00, 2018-10-28 02:00:00]
1 2019 [2019-03-31 01:00:00, 2019-10-27 02:00:00]
2 2019 [2019-03-31 01:00:00, 2019-10-27 02:00:00]
3 2019 [2019-03-31 01:00:00, 2019-10-27 02:00:00]
4 2019 [2019-03-31 01:00:00, 2019-10-27 02:00:00]
5 2020 [2020-03-29 01:00:00, 2020-10-25 02:00:00]
6 2020 [2020-03-29 01:00:00, 2020-10-25 02:00:00]
7 2020 [2020-03-29 01:00:00, 2020-10-25 02:00:00]
8 2021 [2021-03-28 01:00:00, 2021-10-31 02:00:00]
如果我清楚地理解了你的挑战,这是一个合并:
(df.rename(columns={'DST Start' : 'col1', 'DST End': 'col2'})
.merge(df1.rename(columns={'date':'Year'}),
on='Year')
)
Year col1 col2
0 2018 2018-03-25 01:00:00 2018-10-28 02:00:00
1 2019 2019-03-31 01:00:00 2019-10-27 02:00:00
2 2019 2019-03-31 01:00:00 2019-10-27 02:00:00
3 2019 2019-03-31 01:00:00 2019-10-27 02:00:00
4 2019 2019-03-31 01:00:00 2019-10-27 02:00:00
5 2020 2020-03-29 01:00:00 2020-10-25 02:00:00
6 2020 2020-03-29 01:00:00 2020-10-25 02:00:00
7 2020 2020-03-29 01:00:00 2020-10-25 02:00:00
8 2021 2021-03-28 01:00:00 2021-10-31 02:00:00