是否可以在单个操作中如上所述创建列表,从而不必重复遍历printedPGDate
两次?
#months list
months = list(set(df['printedPGDate'].map(lambda date : date.month)))
print(months)
#years list
years = list(set(df['printedPGDate'].map(lambda date : date.year)))
print(years)
答案 0 :(得分:1)
我认为不是简单的方法,您也可以使用:
months = df['printedPGDate'].dt.month.unique().tolist()
years = df['printedPGDate'].dt.year.unique().tolist()
如果仅希望循环一次,则可以创建defaultdict
:
rng = pd.date_range('2017-04-03', periods=10, freq='400D')
df = pd.DataFrame({'printedPGDate': rng, 'a': range(10)})
print (df)
printedPGDate a
0 2017-04-03 0
1 2018-05-08 1
2 2019-06-12 2
3 2020-07-16 3
4 2021-08-20 4
5 2022-09-24 5
6 2023-10-29 6
7 2024-12-02 7
8 2026-01-06 8
9 2027-02-10 9
from collections import defaultdict
d = defaultdict(list)
for x in df['printedPGDate']:
d['months'].append(x.month)
d['years'].append(x.year)
print (d)
defaultdict(<class 'list'>, {'months': [4, 5, 6, 7, 8, 9, 10, 12, 1, 2],
'years': [2017, 2018, 2019, 2020, 2021,
2022, 2023, 2024, 2026, 2027]})