我有一个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