首页 > 解决方案 > 如何根据python中数据框中其他列的值/计数计算数据框中列的值?

问题描述

我有一个 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 else hour_total = (df1.percentage /100) * total

例如,如果数据帧 1 如下所示:-(日期 mid,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 

我怎样才能做到这一点?

标签: pythonpython-3.xpandas

解决方案


您可以尝试应用功能

例如

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

推荐阅读