Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.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 熊猫将数据帧剪切为间隔,然后在间隔中获取值_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫将数据帧剪切为间隔,然后在间隔中获取值

Python 熊猫将数据帧剪切为间隔,然后在间隔中获取值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,并根据col1中的值将其切割成10个分位数: pd.qcut(df.col1, [0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1]) 这将创建一系列间隔 之后,我想创建一个列表列表 [['col2 values where col1 in quantile1'],['col2 values where col1 in quantile2'],...] 根据col2中的所有值,这些值位于之前创建的间隔内,类似于: qcut = pd.qcut(df.col1,

我有一个数据帧,并根据col1中的值将其切割成10个分位数:

pd.qcut(df.col1, [0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1])
这将创建一系列间隔

之后,我想创建一个列表列表

[['col2 values where col1 in quantile1'],['col2 values where col1 in quantile2'],...] 
根据col2中的所有值,这些值位于之前创建的间隔内,类似于:

qcut = pd.qcut(df.col1, [0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1])

qlist = [[None]*len(qcut)]

for i in range(len(qcut)+1):
    qlist[[i]].append(df.col2.loc[qcut.iloc[i].left < df.col1 < qcut.iloc[i].right])
qcut=pd.qcut(df.col1,[0,1,2,3,4,5,6,7,8,9,1])
qlist=[[None]*len(qcut)]
对于范围内的i(透镜(qcut)+1):
qlist[[i]].append(df.col2.loc[qcut.iloc[i]。左
不幸的是,我找不到正确的布尔运算来确定一个值是否在一个区间内


如果您了解运算符或有更好的想法,请提前感谢。

因为您正在进行分位数运算,所以每一行都将归入一个分位数。要按另一列的分位数对一列进行分组,只需扫描该列并搜索分位数中的更改,然后将列表保存在每个组中

试试这个:

import pandas as pd

df = pd.DataFrame(
   {'col1':[x for x in range(50)],  # 0-49
    'col2':[str(chr(x+65)) for x in range(50)]}  # ascii 65-114
)

qc = pd.qcut(df.col1, [0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1])  # 10 quantiles

all = []  # full list
lst = []  # each quantile
last = ''
for z in zip(df['col2'], qc):
   if z[1] != last:  # next quantile
      all.append(lst)
      lst = [z[0]]  # start new list
      last = z[1]
   else:
      lst.append(z[0])  # same quantile
      
      
all.append(lst)  # final quantile
del all[0]  # remove blank

print(df)
print(qc)
print(all)
输出

    col1 col2
0      0    A
1      1    B
2      2    C
3      3    D
4      4    E
5      5    F
6      6    G
......

0      (-0.001, 4.9]
1      (-0.001, 4.9]
2      (-0.001, 4.9]
3      (-0.001, 4.9]
4      (-0.001, 4.9]
5        (4.9, 81.8]
6        (4.9, 81.8]
......

[['A', 'B', 'C', 'D', 'E'], 
 ['F', 'G', 'H', 'I', 'J'], 
 ['K', 'L', 'M', 'N', 'O'], 
 ['P', 'Q', 'R', 'S', 'T'], 
 ['U', 'V', 'W', 'X', 'Y'], 
 ['Z', '[', '\', ']', '^'], 
 ['_', '`', 'a', 'b', 'c'], 
 ['d', 'e', 'f', 'g', 'h'], 
 ['i', 'j', 'k', 'l', 'm'], 
 ['n', 'o', 'p', 'q', 'r']]

作者:保罗·H。简单地按col2的cut对数据帧进行分组并将其作为列表应用

首先,这个问题非常模糊,没有示例数据和预期输出,很难知道您想要什么。第二,你想要一个列表的数据框是很奇怪的,因为这并不是数据框被优化以包含的内容。最后:
df.groupby(qcut)['col2].apply(list)
Hi-Paul,我想根据col2中的值列表分割数据帧。谢谢你的回答。如果维基上有熊猫标签,那么有一个关于制作可复制熊猫的问题链接,比如你的问题。我建议你读一下。我认为这个问题很随意,不需要一个例子。而且似乎是这样。很抱歉给您带来不便。我还不清楚您想要实现什么。Hi Mike,@Paul H的答案实际上已经成功了。仍然感谢您的回答。请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
df.groupby(qcut)['col2'].apply(list)