Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Groupby和List类别_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python Groupby和List类别

Python Groupby和List类别,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有以下数据框 将熊猫作为pd导入 数据={“小时”:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23], “值”:[0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1]} df=pd.DataFrame(数据) 我一直在尝试向df添加一个额外的列,包括groupbyvalues的值以及以下列表: [2, 4, 6, 8, 10, 16, 18, 21, 23] 此列表表示应在几小

我有以下数据框

将熊猫作为pd导入
数据={“小时”:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],
“值”:[0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1]}
df=pd.DataFrame(数据)
我一直在尝试向
df
添加一个额外的列,包括groupby
values
的值以及以下列表:

[2, 4, 6, 8, 10, 16, 18, 21, 23]
此列表表示应在几小时后进行挖掘。例如,在新的列
类别
中,2到4之间的
值等于1,否则等于0,6到8之间的小时数等于2,值等于1,否则等于0,依此类推。。
我尝试了以下方法:

df.groupby(["values", "hours"])
但我不能站出来

预期结果如下所示:


更新以回答问题。您必须创建单独的查询(如下所示)。这应该适用于特定范围

df['category'] = 0
df.loc[(df['hours'] >= 2) & (df['hours'] <= 4), 'category'] = df['values']
df.loc[(df['hours'] >= 6) & (df['hours'] <= 8), 'category'] = df['values'] * 2
df.loc[df['hours'] == 10, 'category'] = df['values'] * 3
df.loc[(df['hours'] >= 16) & (df['hours'] <= 18), 'category'] = df['values'] * 4
df.loc[(df['hours'] >= 21) & (df['hours'] <= 23), 'category'] = df['values'] * 5
df['category']=0

df.loc[(df['hours']>=2)&(df['hours']=6)&(df['hours']=16)&(df['hours']=21)&(df['hours']您的问题有问题,因此我将假设Epsi95的评论。因此,您可以尝试以下内容:

当您的列表大小为偶数时,这将起作用。您也可以根据您的案例修改此设置

df['category']=0
x = list(zip(bins[::2], bins[1::2]))
rng = { range(i[0], i[1]+1):idx+1 for idx,i in enumerate(x)}
df.loc[df['values'].eq(1), 'category'] = df.loc[df['values'].eq(1), 'hours'].apply(lambda x: next((v for k, v in rng.items() if x in k), 0))
编辑:
df:

    hours   values  category
0   1   0   0
1   2   1   1
2   3   1   1
3   4   1   1
4   5   0   0
5   6   1   2
6   7   0   0
7   8   1   2
8   9   0   0
9   10  1   3
10  11  0   0
11  12  0   0
12  13  0   0
13  14  0   0
14  15  0   0
15  16  1   4
16  17  1   4
17  18  1   4
18  19  0   0
19  20  0   0
20  21  1   5
21  22  0   0
22  23  1   5

为什么21是5?它应该是4对吗?
2,4,=>1;6,8,=>2;10,16,=>3;18,21,=>4;23=>5
5只是一个可以区分所有时间的类别,例如2到4类别1,6到8类别2,10独立类别3,16到18类别4和21到23类别5。这有帮助吗?我试着运行它,它返回了一个错误,询问在is bins?@DaveWill
bins=[2,4,6,8,10,16,18,21,23]
如果是随机的(不是每5小时一次),应该替换什么而不是5个?我已经更新了我的答案来解释这一点。感谢@DaveWill的澄清
    hours   values  category
0   1   0   0
1   2   1   1
2   3   1   1
3   4   1   1
4   5   0   0
5   6   1   2
6   7   0   0
7   8   1   2
8   9   0   0
9   10  1   3
10  11  0   0
11  12  0   0
12  13  0   0
13  14  0   0
14  15  0   0
15  16  1   4
16  17  1   4
17  18  1   4
18  19  0   0
19  20  0   0
20  21  1   5
21  22  0   0
22  23  1   5