首页 > 解决方案 > 如何将单个日期转换为 Pandas 的一个日期列

问题描述

我有一个熊猫数据框,每天作为一列。我想将日期转换为单个数据列以执行一些分析。我尝试在很多地方搜索,但没有一个人谈论这种情况。

Product_ID  1/22/2020   1/23/2020   1/24/2020   1/25/2020   1/26/2020   
ABC         1           3           2           3           5   
ABD         2           1           2           2           5   
ABC         0           1           0           3           4   
ABD         1           1           1           3           8   
ABC         3           0           0           3           4   
ABE         6           2           2           1           5   

我正在寻找的输出是:

Date        ABC     ABD     ABE
1/22/2020   4       3       6
1/23/2020   7       2       2
1/24/2020   2       3       2
1/25/2020   9       5       1
1/26/2020   13      13      5

它正在添加重复列的数据。

编辑

对 Product_ID 进行分组确实让我得到了每个日期的每个产品的总和,但我仍然无法将日期提取为不同的“日期”列。

标签: pythonpandas

解决方案


如果您的初始数据框如下所示:

data = {
    'Product_ID': {0: 'ABC', 1: 'ABD', 2: 'ABC', 3: 'ABD', 4: 'ABC', 5: 'ABE'},
    '1/22/2020': {0: 1, 1: 2, 2: 0, 3: 1, 4: 3, 5: 6},
    '1/23/2020': {0: 3, 1: 1, 2: 1, 3: 1, 4: 0, 5: 2},
    '1/24/2020': {0: 2, 1: 2, 2: 0, 3: 1, 4: 0, 5: 2},
    '1/25/2020': {0: 3, 1: 2, 2: 3, 3: 3, 4: 3, 5: 1},
    '1/26/2020': {0: 5, 1: 5, 2: 4, 3: 8, 4: 4, 5: 5}
}
df = pd.DataFrame(data)

print(df)
  Product_ID  1/22/2020  1/23/2020  1/24/2020  1/25/2020  1/26/2020
0        ABC          1          3          2          3          5
1        ABD          2          1          2          2          5
2        ABC          0          1          0          3          4
3        ABD          1          1          1          3          8
4        ABC          3          0          0          3          4
5        ABE          6          2          2          1          5

正如@ Quang Hoang 在上面的评论中指出的那样,您可以对数据进行分组。并获取Date列,.reset_index()并将.rename()旧索引列添加到Date. 如果需要,您还可以重命名列轴。代码如下:

df_new = df\
    .groupby('Product_ID').sum().T\
    .reset_index()\
    .rename(columns={'index': 'Date'})\
    .rename_axis(None, axis='columns')

print(df_new)
        Date  ABC  ABD  ABE
0  1/22/2020    4    3    6
1  1/23/2020    4    2    2
2  1/24/2020    2    3    2
3  1/25/2020    9    5    1
4  1/26/2020   13   13    5

推荐阅读