我有一个DataFramedf
,我需要根据特定列ColB
中的值是否在给定范围内进行拆分;
1- 3,3 - 5,5 -7等
输入:
Time ColA ColB ColC
1 100 1.1 500
2 105 3.2 600
3 107 7.7 550
4 106 2.4 750
5 104 5.2 950
6 103 6.9 450
所需输出:
Time ColA ColB ColC
1 100 1.1 500
4 106 2.4 750
Time ColA ColB ColC
2 105 3.2 600
Time ColA ColB ColC
3 107 7.7 550
5 104 5.2 950
6 103 6.9 450
在Python中有没有一种不创建循环的好方法来做到这一点?另外,将输出存储为数据帧列表或数据帧字典会更有效吗?这是一个相当大的数据集。
使用pandas.cut
https://pandas.pydata.org/docs/reference/api/pandas.cut.html
。
groups = pd.cut(df["ColB"], [1,3,5,7])
[d for _, d in df.groupby(groups)]
你可以试试:
lst = [(1,3), (3,5), (5,7)]
result = [df[df['ColB'].between(a,b)] for a,b in lst]
for i in result:
print(i, "n")
Time ColA ColB ColC
0 1 100 1.1 500
3 4 106 2.4 750
Time ColA ColB ColC
1 2 105 3.2 600
Time ColA ColB ColC
4 5 104 5.2 950
5 6 103 6.9 450