Python 熊猫将数据帧剪切为间隔,然后在间隔中获取值
我有一个数据帧,并根据col1中的值将其切割成10个分位数: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,
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)