在python中,如何根据dataframe中其他列的值/计数计算dataframe中列的值?

在python中,如何根据dataframe中其他列的值/计数计算dataframe中列的值?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个熊猫数据框,它有一个月24小时的数据,包括以下字段: (df1):- date,hour,mid,rid,percentage,total 我需要使用此数据帧和以下字段创建第二个数据帧: (df2) :- date, hour,mid,rid,hour_total 此处,小时总数的计算如下: 如果对于来自数据帧1的(日期、中间、rid)组合,df1.percentage为0的记录计数为24,则hour_total=df1.total/24,否则hour_total=(df1.pe

我有一个熊猫数据框,它有一个月24小时的数据,包括以下字段:

(df1):- date,hour,mid,rid,percentage,total 
我需要使用此数据帧和以下字段创建第二个数据帧:

(df2) :-  date, hour,mid,rid,hour_total
此处,小时总数的计算如下:

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

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

那么数据帧2应该是:(hour_total=df1.total/24)


我怎样才能做到这一点

您可以尝试应用功能

比如说

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

您可以尝试应用函数

比如说

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