如何根据一系列值有效地对数据框行进行分类?
How to efficiently categorise dataframe rows based on a range of values?
你好,我是 Python 的新手,我有一个 pandas 数据框,看起来与下面看到的类似,我从一个 txt 文件导入:
UnitNamePCU Timestamp PowerREF PowerPCU
F09 2014-11-01 00:20:00 60.73 79.64
F09 2014-11-01 00:30:00 63.15 84.06
F09 2014-11-01 01:00:00 101.06 84.03
F09 2014-11-01 01:10:00 122.79 104.29
F09 2014-11-01 01:20:00 86.57 110.08
F09 2014-11-01 01:40:00 16.74 27.32
F09 2014-11-01 01:50:00 12.59 21.69
F09 2014-11-01 02:20:00 17.42 13.98
我的问题是如何将 PowerREF 和 PowerPCU 列中的数据排序为 "bins" 类似:bin1 = PowerREF < 50, bin2 = 50 < PowerREF < 100。我知道我可以做类似的事情:
bin1 = [x for x in data.PowerREF if x < 50]
bin2 = [x for x in data.PowerREF if x > 50 and x < 100]
但由于 "bin" 间隔可能会在下次 bin1 = x < 100、bin2 = 100 < x < 200 时发生变化。
我事先知道 bin 间隔和最后一个 bin 的最大值限制。所以我想我应该可以做一些事情:
PowerLim = 1500
binInterval = 50
bin = range(0, PowerLim+1, binInterval)
我只是不知道如何将它智能有效地整合到 binnin 过程中。
IIUC,你可以在这里使用pd.cut
:
power_lim = 1500
bins = np.arange(0, power_lim + 1, 50)
pd.cut(df.PowerREF, bins=bins)
F09 (50, 100]
F09 (50, 100]
F09 (100, 150]
F09 (100, 150]
F09 (50, 100]
F09 (0, 50]
F09 (0, 50]
F09 (0, 50]
Name: PowerREF, dtype: category
Categories (30, interval[int64]): [(0, 50] < (50, 100] < (100, 150] < (150, 200] < ... <
(1300, 1350] < (1350, 1400] < (1400, 1450] < (1450, 1500]]
你好,我是 Python 的新手,我有一个 pandas 数据框,看起来与下面看到的类似,我从一个 txt 文件导入:
UnitNamePCU Timestamp PowerREF PowerPCU
F09 2014-11-01 00:20:00 60.73 79.64
F09 2014-11-01 00:30:00 63.15 84.06
F09 2014-11-01 01:00:00 101.06 84.03
F09 2014-11-01 01:10:00 122.79 104.29
F09 2014-11-01 01:20:00 86.57 110.08
F09 2014-11-01 01:40:00 16.74 27.32
F09 2014-11-01 01:50:00 12.59 21.69
F09 2014-11-01 02:20:00 17.42 13.98
我的问题是如何将 PowerREF 和 PowerPCU 列中的数据排序为 "bins" 类似:bin1 = PowerREF < 50, bin2 = 50 < PowerREF < 100。我知道我可以做类似的事情:
bin1 = [x for x in data.PowerREF if x < 50]
bin2 = [x for x in data.PowerREF if x > 50 and x < 100]
但由于 "bin" 间隔可能会在下次 bin1 = x < 100、bin2 = 100 < x < 200 时发生变化。 我事先知道 bin 间隔和最后一个 bin 的最大值限制。所以我想我应该可以做一些事情:
PowerLim = 1500
binInterval = 50
bin = range(0, PowerLim+1, binInterval)
我只是不知道如何将它智能有效地整合到 binnin 过程中。
IIUC,你可以在这里使用pd.cut
:
power_lim = 1500
bins = np.arange(0, power_lim + 1, 50)
pd.cut(df.PowerREF, bins=bins)
F09 (50, 100]
F09 (50, 100]
F09 (100, 150]
F09 (100, 150]
F09 (50, 100]
F09 (0, 50]
F09 (0, 50]
F09 (0, 50]
Name: PowerREF, dtype: category
Categories (30, interval[int64]): [(0, 50] < (50, 100] < (100, 150] < (150, 200] < ... <
(1300, 1350] < (1350, 1400] < (1400, 1450] < (1450, 1500]]