我有一个pandas数据框,其中包含一个月的一天24小时的数据,其中包含以下字段:

(df1):- date,hour,mid,rid,percentage,total


我需要使用具有以下字段的该数据框来创建第二个数据框:

(df2) :-  date, hour,mid,rid,hour_total


这里hour_total的计算如下:

如果对于数据帧1中的(date,mid,rid)的组合,则df1.percentage为0的记录数为24,则hour_total = df1.total/24,否则hour_total =(df1.percentage / 100)*合计

例如,如果数据框1如下:-(日期中,rid(perc为0的日期)组的记录数为24)

 date,hour,mid,rid,perc,total

 2019-10-31,0,2, 0,0,3170.87
 2019-10-31,1,2,0,0,3170.87
 2019-10-31,2,2,0,0,3170.87
 2019-10-31,3,2,0,0,3170.87
 2019-10-31,4,2,0,0,3170.87
.

.


2019-10-31,23,2,0,0,3170.87


然后,数据框2应该是:(hour_total = df1.total/24)

 date,hour,mid,rid,hour_total

 2019-10-31,0,2,0,132.12
 2019-10-31,1,4,0,132.12
 2019-10-31,2,13,0,132.12
 2019-10-31,3,17,0,132.12
 2019-10-31,4,7,0,132.12
.

.

2019-10-31,23,27,0,132.12


我该怎么做?

最佳答案

您可以尝试套用功能

例如

a = np.random.randint(100,200, size=5)
b = np.random.randint(100,200, size=5)
c = [datetime.now() for x in range(100) if x%20 ==  0]
df1 = pd.DataFrame({'Time' : c, "A" : a, "B" : b})


上面的数据框看起来像这样

    Time    A   B
0   2019-10-24 20:37:38.907058  158 190
1   2019-10-24 20:37:38.907058  161 127
2   2019-10-24 20:37:38.908056  100 100
3   2019-10-24 20:37:38.908056  163 164
4   2019-10-24 20:37:38.908056  121 159


现在,如果我们要计算一个新列,该列的值取决于该列的其他值。
您可以定义执行此计算的函数。

def func(x):
    t = x[0] # time
    a = x[1] # A
    b = x[2] # B
    return a+b


并将此功能应用于数据框

df1["new_col"] = df1.apply(func, axis=1)


这将产生以下结果。

Time    A   B   new_col
0   2019-10-24 20:37:38.907058  158 190 348
1   2019-10-24 20:37:38.907058  161 127 288
2   2019-10-24 20:37:38.908056  100 100 200
3   2019-10-24 20:37:38.908056  163 164 327
4   2019-10-24 20:37:38.908056  121 159 280

09-25 17:01
查看更多