数据帧中多行的条件累积和

2024-09-30 04:32:24 发布

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

我试图根据一个条件来计算数据帧中连续四行的累计和。在

新列('veh_time_TOT')是四个连续的'车辆时间'值的和,条件是'日类型':周末或工作日。在

下面是如何设置数据:

    veh-time(s) distance(m) Day_type
0   72  379.0   Weekday
1   70  379.0   Weekday
2   50  379.0   Weekday
3   60  379.0   Weekday
4   70  379.0   Weekday
5   65  379.0   Weekday
6   30  379.0   Weekend
7   35  379.0   Weekend
8   30  379.0   Weekend
9   30  379.0   Weekend
10  20  379.0   Weekend 

以下是所需的输出:

^{pr2}$

我尝试了几种方法,但是我唯一能找到的就是使用.cumsum函数,它只查找连续两行的总和。 “veh_time_TOT”中的零是因为还没有4行来构成和。在

我认为这将是一个.cumsum和条件if语句的组合,该语句在循环中进行。在

你们觉得怎么样?感谢任何帮助。在


Tags: 数据类型time时间语句条件distanceday
1条回答
网友
1楼 · 发布于 2024-09-30 04:32:24

以下是我获取所需列的步骤:

  • 首先,我设置示例数据帧。

  • 接下来,我定义了三个感兴趣的列(列 值将作为计算的基础,列用于 比较,以及计算数量的列名。

  • 之后,我找到所有符合此计算条件的行(前4行的col_compare的值相同)。在
  • 然后,我迭代原始数据帧的这一部分,将前面的四个值col_val相加。

  • 最后,我使用所需的名称col_name_new创建新列

    • 将其值初始化为零
    • 使用我们在上一步中生成的列表填充符合条件的位置:

这是我的代码,请随时在评论中询问Q!在

import pandas as pd

# Setup

cols = ['veh-time(s)', 'distance(m)', 'Day_type']

data= [[72,  379.0 ,  'Weekday'],
       [70,  379.0 ,  'Weekday'],
       [50,  379.0 ,  'Weekday'],
       [60,  379.0 ,  'Weekday'],
       [70,  379.0 ,  'Weekday'],
       [65,  379.0 ,  'Weekday'],
       [30,  379.0 ,  'Weekend'],
       [35,  379.0 ,  'Weekend'],
       [30,  379.0 ,  'Weekend'],
       [30,  379.0 ,  'Weekend'],
       [20,  379.0 ,  'Weekend']]


df = pd.DataFrame(data,columns=cols )

# Define columns for potential future generalization

col_val='veh-time(s)'
col_compare='Day_type'
col_name_new = 'veh_time_TOT'

# DataFrame slice of rows eligible for calculation

cut_prev_four =  (df[col_compare].shift(1)==df[col_compare]) \
                &(df[col_compare].shift(2)==df[col_compare].shift(1)) \
                &(df[col_compare].shift(3)==df[col_compare].shift(2))

df_consecutive = df[cut_prev_four]

# Perform calculation on eligible rows. Store in list

prev_four_list = []
for i,row in df_consecutive.iterrows():
    prev_four_vals = df.iloc[i-3:i+1][col_val].values
    print(i, prev_four_vals, sum(prev_four_vals) )
    prev_four_list.append(sum(prev_four_vals))

# Set new column to the calculated values

df[col_name_new] = 0
df.loc[cut_prev_four, col_name_new] = prev_four_list

相关问题 更多 >

    热门问题