gpt4 book ai didi

python - 如何使用 pandas 在我的最终 df 中添加和排序月-年列?

转载 作者:行者123 更新时间:2023-12-04 03:38:57 25 4
gpt4 key购买 nike

假设我有一个像下面这样的虚拟 df,

{'column1': ['ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD'], 'column2': ['V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V'], 'column3': ['CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP'], 'column4': ['OCP', 'AC', 'TC', 'AA', 'EE', 'CS', 'UUU', 'MMM', 'CCC', 'TOQ', 'OC', 'FR', 'OCP', 'AC', 'TC', 'AA', 'EE', 'CS', 'UUU', 'MMM', 'CCC', 'TOQ', 'OC', 'FR'], 'Apr-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Aug-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Feb-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Jan-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Jul-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Jun-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Mar-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'May-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Nov-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Oct-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Sep-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Unnamed: 15': [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]}

从上面的 df 可以看出,df 中缺少月-年 Dec-21。

有没有办法添加缺失的月-年列,然后对它们进行排序,这样我就可以看到最终的 df 从 Jan-21 到 Dec-21 有月-年,年份是通用的 datetime.now( ).strftime('%y')

最佳答案

这只是对您问题的部分回答,它回答了问题的第二部分。 (除非你需要这样做很多年,否则我会手动添加缺少的月份,例如 df['Dec-21'] = df['Nov-21'])。按时间升序排列的列,您可以对您提供的数据框执行以下操作:

import pandas as pd
import numpy as np
from numpy import nan

my_dict = {'column1': ['ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD', 'ABCD'], 'column2': ['V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V', 'V'], 'column3': ['CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CT', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP', 'CP'], 'column4': ['OCP', 'AC', 'TC', 'AA', 'EE', 'CS', 'UUU', 'MMM', 'CCC', 'TOQ', 'OC', 'FR', 'OCP', 'AC', 'TC', 'AA', 'EE', 'CS', 'UUU', 'MMM', 'CCC', 'TOQ', 'OC', 'FR'], 'Apr-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Aug-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Feb-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Jan-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Jul-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Jun-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Mar-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'May-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Nov-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Oct-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Sep-21': [nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan, nan, nan, 0.0, nan, nan, nan, nan, nan, nan, 0.0, 0.0, nan], 'Unnamed: 15': [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]}
df = pd.DataFrame(my_dict)

也就是

   column1 column2 column3 column4  Apr-21  Aug-21  Feb-21  Jan-21  Jul-21  \
0 ABCD V CT OCP NaN NaN NaN NaN NaN
1 ABCD V CT AC NaN NaN NaN NaN NaN
2 ABCD V CT TC 0.0 0.0 0.0 0.0 0.0
3 ABCD V CT AA NaN NaN NaN NaN NaN
4 ABCD V CT EE NaN NaN NaN NaN NaN
5 ABCD V CT CS NaN NaN NaN NaN NaN
6 ABCD V CT UUU NaN NaN NaN NaN NaN
7 ABCD V CT MMM NaN NaN NaN NaN NaN
8 ABCD V CT CCC NaN NaN NaN NaN NaN
9 ABCD V CT TOQ 0.0 0.0 0.0 0.0 0.0
10 ABCD V CT OC 0.0 0.0 0.0 0.0 0.0
11 ABCD V CT FR NaN NaN NaN NaN NaN
12 ABCD V CP OCP NaN NaN NaN NaN NaN
13 ABCD V CP AC NaN NaN NaN NaN NaN
14 ABCD V CP TC 0.0 0.0 0.0 0.0 0.0
15 ABCD V CP AA NaN NaN NaN NaN NaN
16 ABCD V CP EE NaN NaN NaN NaN NaN
17 ABCD V CP CS NaN NaN NaN NaN NaN
18 ABCD V CP UUU NaN NaN NaN NaN NaN
19 ABCD V CP MMM NaN NaN NaN NaN NaN
20 ABCD V CP CCC NaN NaN NaN NaN NaN
21 ABCD V CP TOQ 0.0 0.0 0.0 0.0 0.0
22 ABCD V CP OC 0.0 0.0 0.0 0.0 0.0
23 ABCD V CP FR NaN NaN NaN NaN NaN

Jun-21 Mar-21 May-21 Nov-21 Oct-21 Sep-21 Unnamed: 15
0 NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN
2 0.0 0.0 0.0 0.0 0.0 0.0 NaN
3 NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN
9 0.0 0.0 0.0 0.0 0.0 0.0 NaN
10 0.0 0.0 0.0 0.0 0.0 0.0 NaN
11 NaN NaN NaN NaN NaN NaN NaN
12 NaN NaN NaN NaN NaN NaN NaN
13 NaN NaN NaN NaN NaN NaN NaN
14 0.0 0.0 0.0 0.0 0.0 0.0 NaN
15 NaN NaN NaN NaN NaN NaN NaN
16 NaN NaN NaN NaN NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN
18 NaN NaN NaN NaN NaN NaN NaN
19 NaN NaN NaN NaN NaN NaN NaN
20 NaN NaN NaN NaN NaN NaN NaN
21 0.0 0.0 0.0 0.0 0.0 0.0 NaN
22 0.0 0.0 0.0 0.0 0.0 0.0 NaN
23 NaN NaN NaN NaN NaN NaN NaN

可以按以下方式排序

import operator
sorted_dict = sorted(dict(zip(df.columns[4:14],pd.to_datetime(df.columns[4:14], format='%b-%y'))).items(), key=operator.itemgetter(1))
df[[i[0] for i in sorted_dict]]

返回 df 的日期部分:

    Jan-21  Feb-21  Mar-21  Apr-21  May-21  Jun-21  Jul-21  Aug-21  Oct-21  \
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
11 NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
15 NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
23 NaN NaN NaN NaN NaN NaN NaN NaN NaN

Nov-21
0 NaN
1 NaN
2 0.0
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 0.0
10 0.0
11 NaN
12 NaN
13 NaN
14 0.0
15 NaN
16 NaN
17 NaN
18 NaN
19 NaN
20 NaN
21 0.0
22 0.0
23 NaN

然后您需要将它与 df 的剩余部分合并。

关于python - 如何使用 pandas 在我的最终 df 中添加和排序月-年列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66407662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com