如何使用 pandas 制作不同大小的垃圾箱?
How to make bins of different sizes using pandas?
我有一个列表,想在 DataFrame
中创建一个列,其中包含使用 cut
或 qcut
的分箱,但问题是我的分箱大小不均
l=[1, 11, 21, 31, 41, 51, 61, 71, 81, 91,101, 126, 151, 176, 201, 226, 251, 276, 301, 326, 351, 376, 401, 426, 451, 476, 501, 551, 601, 651, 701, 751, 801, 851, 901, 951, 1001, 1051, 1101, 1151,1201, 1251, 1301, 1351, 1401, 1451, 1501, 1551, 1601, 1651,1701, 1751, 1801, 1851, 1901, 1951, 2001, 2051, 2101, 2151]
我想要的输出如下
+-----------+
| Range |
+-----------+
| 1-10 |
| 11-20 |
| 21-30 |
| 31-40 |
| 41-50 |
| 51-60 |
| 61-70 |
| 71-80 |
| 81-90 |
| 91-100 |
| 101-125 |
| 126-150 |
| 151-175 |
| 176-200 |
| 201-225 |
| 226-250 |
| 251-275 |
| 276-300 |
| 301-325 |
| 326-350 |
| 351-375 |
| 376-400 |
| 401-425 |
| 426-450 |
| 451-475 |
| 476-500 |
| 501-550 |
| 551-600 |
| 601-650 |
| 651-700 |
| 701-750 |
| 751-800 |
| 801-850 |
| 851-900 |
| 901-950 |
| 951-1000 |
| 1001-1050 |
| 1051-1100 |
| 1101-1150 |
| 1151-1200 |
| 1201-1250 |
| 1251-1300 |
| 1301-1350 |
| 1351-1400 |
| 1401-1450 |
| 1451-1500 |
| 1501-1550 |
| 1551-1600 |
| 1601-1650 |
| 1651-1700 |
| 1701-1750 |
| 1751-1800 |
| 1801-1850 |
| 1851-1900 |
| 1901-1950 |
| 1951-2000 |
| 2001-2050 |
| 2051-2100 |
| 2101-2150 |
| 2151-2200 |
+-----------+
所以基本上,我想检查这些范围内是否存在数字,然后根据匹配获取更多列值的值。
假设您从以下数据开始:
df = pd.DataFrame(100*np.random.rand(100))
您可以通过以下方式直接获取垃圾箱:
df['bins'] = pd.cut(df[0], bins=l, include_lowest=True)
输出:
0 bins
0 77.386478 (71, 81]
1 97.008834 (91, 101]
2 37.207325 (31, 41]
3 62.065115 (61, 71]
4 37.533101 (31, 41]
.. ... ...
95 93.900669 (91, 101]
96 9.734420 (1, 11]
97 15.910740 (11, 21]
98 58.655497 (51, 61]
99 91.975037 (91, 101]
我有一个列表,想在 DataFrame
中创建一个列,其中包含使用 cut
或 qcut
的分箱,但问题是我的分箱大小不均
l=[1, 11, 21, 31, 41, 51, 61, 71, 81, 91,101, 126, 151, 176, 201, 226, 251, 276, 301, 326, 351, 376, 401, 426, 451, 476, 501, 551, 601, 651, 701, 751, 801, 851, 901, 951, 1001, 1051, 1101, 1151,1201, 1251, 1301, 1351, 1401, 1451, 1501, 1551, 1601, 1651,1701, 1751, 1801, 1851, 1901, 1951, 2001, 2051, 2101, 2151]
我想要的输出如下
+-----------+
| Range |
+-----------+
| 1-10 |
| 11-20 |
| 21-30 |
| 31-40 |
| 41-50 |
| 51-60 |
| 61-70 |
| 71-80 |
| 81-90 |
| 91-100 |
| 101-125 |
| 126-150 |
| 151-175 |
| 176-200 |
| 201-225 |
| 226-250 |
| 251-275 |
| 276-300 |
| 301-325 |
| 326-350 |
| 351-375 |
| 376-400 |
| 401-425 |
| 426-450 |
| 451-475 |
| 476-500 |
| 501-550 |
| 551-600 |
| 601-650 |
| 651-700 |
| 701-750 |
| 751-800 |
| 801-850 |
| 851-900 |
| 901-950 |
| 951-1000 |
| 1001-1050 |
| 1051-1100 |
| 1101-1150 |
| 1151-1200 |
| 1201-1250 |
| 1251-1300 |
| 1301-1350 |
| 1351-1400 |
| 1401-1450 |
| 1451-1500 |
| 1501-1550 |
| 1551-1600 |
| 1601-1650 |
| 1651-1700 |
| 1701-1750 |
| 1751-1800 |
| 1801-1850 |
| 1851-1900 |
| 1901-1950 |
| 1951-2000 |
| 2001-2050 |
| 2051-2100 |
| 2101-2150 |
| 2151-2200 |
+-----------+
所以基本上,我想检查这些范围内是否存在数字,然后根据匹配获取更多列值的值。
假设您从以下数据开始:
df = pd.DataFrame(100*np.random.rand(100))
您可以通过以下方式直接获取垃圾箱:
df['bins'] = pd.cut(df[0], bins=l, include_lowest=True)
输出:
0 bins
0 77.386478 (71, 81]
1 97.008834 (91, 101]
2 37.207325 (31, 41]
3 62.065115 (61, 71]
4 37.533101 (31, 41]
.. ... ...
95 93.900669 (91, 101]
96 9.734420 (1, 11]
97 15.910740 (11, 21]
98 58.655497 (51, 61]
99 91.975037 (91, 101]