【问题标题】:How to create an aggregated table in python panda?如何在 python panda 中创建聚合表?
【发布时间】:2021-09-30 11:47:29
【问题描述】:

在 python notebook 中,我从数据库中提取了时间序列的明细表。

df = data.select("*").toPandas()

值大于2或小于-2推导哪个指标(空值视为Y):

df =

Key Time Indicator Value
A 2021-01-01 00:00 Y 2.00
A 2021-01-01 00:15 Y 3.00
A 2021-01-01 00:30 N 1.00
A 2021-01-01 00:45 Y 10.00
A 2021-01-01 01:10 Y 8.00
A 2021-01-01 01:20 Y 6.00
A 2021-01-01 01:40 Y 4.00
A 2021-01-01 02:05 Y --
A 2021-01-01 02:20 N -1.50
B 2021-01-01 02:55 Y -3.00
B 2021-01-01 03:00 N -0.50
B 2021-01-01 03:05 Y -4.00
C 2021-01-01 03:25 Y 3.00
C 2021-01-01 03:35 Y 3.00
C 2021-01-01 03:50 Y --

我想用以下标准计算一个新表:

  1. 在同一个键内
  2. 连续指标 = Y

然后创建一个包含开始时间、结束时间、持续时间、最大值的行。值和最小值价值

其中:

start_time = 指标的第一行 = 同一键的 Y AND

(end_time = 指标最后一条记录的下一行 = 同一键的 Y OR

end_time = 指示符最后一条记录的最后一行 = Y 如果下一条记录是不同的键)

然后计算持续时间,最大值。每个子集的值和最小值。

虽然最大。和分钟。 values 不会考虑空值。

结果:

df_s =

Key start_time end_time duration(min) max_value min_value
A 2021-01-01 00:00 2021-01-01 00:30 30.00 3.00 2.00
A 2021-01-01 00:45 2021-01-01 02:20 95.00 10.00 4.00
B 2021-01-01 02:55 2021-01-01 03:00 5.00 -3.00 -3.00
C 2021-01-01 03:05 2021-01-01 03:25 20.00 -4.00 -4.00
C 2021-01-01 03:25 2021-01-01 03:50 25.00 3.00 5.00

我应该如何计算 df 来创建新表 df_s

谢谢!

【问题讨论】:

  • 同一个key和不同key是否真的需要end_time的不同标准?

标签: python pandas dataframe date datetime


【解决方案1】:

试试:

# Read in dataframe from clipboard
df = pd.read_clipboard()

# Do some datatyping and replace '--' with np.nan
df['Value'] = df['Value'].replace('--', np.nan)
df['Time'] = pd.to_datetime(df['Time'])
df['Value'] = pd.to_numeric(df['Value'])

# Create logic from grouping and exclude 'N' records values
cond = df['Indicator'] == 'N'
dft = df.assign(Value=df['Value'].mask(cond))

# Create groups
g = (cond).cumsum()

# Groupby and create aggregations
df_out = dft.groupby(['Key', g.shift().bfill()])\
            .agg(start_time=('Time', 'min'),
                 end_time=('Time', 'max'),
                 duration=('Time',lambda x: (x.iloc[-1] - x.iloc[0]).total_seconds() / 60),
                 max_value=('Value','max'),
                 min_value=('Value','min'))

df_out

输出:

                       start_time            end_time  duration  max_value  min_value
Key Indicator                                                                        
A   0.0       2021-01-01 00:00:00 2021-01-01 00:30:00      30.0        3.0        2.0
    1.0       2021-01-01 00:45:00 2021-01-01 02:20:00      95.0       10.0        4.0
B   2.0       2021-01-01 02:55:00 2021-01-01 03:00:00       5.0       -3.0       -3.0
    3.0       2021-01-01 03:05:00 2021-01-01 03:05:00       0.0       -4.0       -4.0
C   3.0       2021-01-01 03:25:00 2021-01-01 03:50:00      25.0        3.0        3.0

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2021-12-11
    • 2023-03-31
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多