You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groupby包含object与datetime64[ns]类型为何返回空DataFrame?

GroupBy求和后得到空DataFrame的原因及解决办法

你的数据与操作情况

DataFrame数据类型

print(df.dtypes)
# 输出:
Daten                              float64
timepoint                   datetime64[ns]
Level                               object
Sublevel                            object
dtype: object

数据内容

Daten timepoint                 Level      Sublevel
1      2019-01-01T00:00:00.000   A          AA
1      2019-01-01T00:00:00.000   A          AA
2      2019-01-01T00:00:00.000   A          AB
2      2019-01-01T00:00:00.000   B          BA
1      2019-02-01T00:00:00.000   A          AA

执行的分组代码

df= df.groupby(
        ['Level', 'timepoint']).agg({'Daten': 'sum'}).reset_index()

预期输出

timepoint                 Level      Daten
2019-01-01T00:00:00.000   A          4
2019-01-01T00:00:00.000   B          2
2019-02-01T00:00:00.000   A          1

可能的原因及解决办法

1. 列名存在隐藏空格

从你给出的数据内容来看,列名(比如Daten、Level)的前后可能存在空格,导致groupby时无法匹配到正确的列。可以先清理列名:

df.columns = df.columns.str.strip()

2. 原DataFrame已被意外清空

如果在执行groupby之前,你对df做过筛选、删除行等操作导致数据为空,结果自然是空DataFrame。可以先执行以下代码确认原数据状态:

print(df.shape)  # 查看行数和列数
print(df.head()) # 查看前几行数据

3. 分组列存在异常值

虽然你显示timepoint是datetime64[ns]类型,但如果实际数据中存在无法解析的日期值,可能导致分组异常。可以检查并修复日期列:

# 检查日期列是否有缺失值
print(df['timepoint'].isna().sum())
# 重新格式化日期,将无效值转为NaN
df['timepoint'] = pd.to_datetime(df['timepoint'], errors='coerce')
# 过滤掉日期为空的行
df = df.dropna(subset=['timepoint'])

修正后的完整代码示例

import pandas as pd

# 模拟你的原始数据
data = {
    'Daten': [1, 1, 2, 2, 1],
    'timepoint': [
        '2019-01-01T00:00:00.000',
        '2019-01-01T00:00:00.000',
        '2019-01-01T00:00:00.000',
        '2019-01-01T00:00:00.000',
        '2019-02-01T00:00:00.000'
    ],
    'Level': ['A', 'A', 'A', 'B', 'A'],
    'Sublevel': ['AA', 'AA', 'AB', 'BA', 'AA']
}
df = pd.DataFrame(data)
df['timepoint'] = pd.to_datetime(df['timepoint'])

# 清理列名(处理可能的空格问题)
df.columns = df.columns.str.strip()

# 执行分组求和并调整列顺序
df = df.groupby(['Level', 'timepoint']).agg({'Daten': 'sum'}).reset_index()
df = df[['timepoint', 'Level', 'Daten']]

# 输出结果
print(df)

执行后输出与你的预期一致:

timepoint Level  Daten
0 2019-01-01 00:00:00     A      4
1 2019-01-01 00:00:00     B      2
2 2019-02-01 00:00:00     A      1

内容的提问来源于stack exchange,提问作者PV8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:50:20