熊猫:在单个操作中从单个系列创建两个列表

时间:2018-12-18 06:21:42

标签: python pandas dataframe

是否可以在单个操作中如上所述创建列表,从而不必重复遍历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)

1 个答案:

答案 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]})