Pandas多索引数据透视表日期格式随排序和精度损失而更改

2024-04-29 04:34:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,看起来有点像这样

                                                 data
    time                       market
    2020-03-02 00:00:00        Commercial        78.0
                               Residential       79.0
    2020-03-02 04:45:15        Commerical        73.0
                               Residential       79.0
    2020-03-02 06:45:29        Commerical        79.0
                               Residential       71.0

我想做的是,如果用户选择不同的时间格式,例如%Y-%m-%d,将其应用于第一列。但是,如果发生这种情况,则该列中存在重复项(例如,将有3个2020-03-02值),Multiindex.set_Level不接受这些重复项。所以我需要以某种方式将它们组合在一起,求和值,同时保持时间顺序

理想输出

                                        data
    time              market
    2020-03-02        Commercial        230.0
                      Residential       229.0

我的代码

elem = df.index.get_level_values(0).sort_values().strftime("%Y-%m-%d")
df.index.set_levels(elem, level=0, inplace=True, verify_integrity=False)
df.groupby(['time', 'market']).sum()

此代码导致时间列和市场列中出现重复项,这很奇怪。看起来它几乎是在市场栏中串联价值

此外,我真的不想通过扁平化或类似的方式来改变结构,从而不限制用户


Tags: 代码用户dfdataindextime方式时间
1条回答
网友
1楼 · 发布于 2024-04-29 04:34:57

IIUC,您可以按天分组timemarket。另外,您需要确保timedatetime类型:

(df.groupby([df.index.get_level_values('time')
               .normalize(), 'market'])
   .sum()
)

输出:

                         data
time       market            
2020-03-02 Commercial   230.0
           Residential  229.0

相关问题 更多 >