【问题标题】:Create different ranges of bins based on a dataframe columns and get the count根据数据框列创建不同范围的 bin 并获取计数
【发布时间】:2019-12-01 02:28:05
【问题描述】:

我是 Python 的新手。我有一个包含三列的数据框,如下所示-

我想将“col1”划分为范围为 2 的箱,并获得其他两列的相应范围(最小值、最大值)。此外,还想知道这些单独的 bin 下的记录数-

我尝试对每一列使用 qcut 并获得结果,但似乎没有获得有效结果。结果不一定需要有'[',但也可以是'('。

此外,如果其他两列的范围与第一列的范围不相等,则当前(其他两列)列中的最后一个值可以重复到最后。

任何有关如何创建新的“范围”和“计数”列的帮助将不胜感激。

【问题讨论】:

  • 所有列是否共享相同的最小/最大阈值。我问是因为如果不是这种情况,一列可能需要比另一列更多的垃圾箱
  • 请将数据作为可复制文本发布。图片无法复制
  • @ksooklall,所有列的值范围都不相同。你是对的,一列可能比另一列需要更多的垃圾箱。因此我提到 - “另外,如果其他两列的范围与第一列的范围不相等,则当前(其他两列)列中的最后一个值可以重复到最后。”
  • 你看过我的解决方案了吗?你可以将它们连接到一个数据框,但你会有很多 nans
  • @Ksoosklall,是的,我尝试了您的解决方案,但并没有完全给出输出。你看我想先将 col1 与 range=2 合并,然后检查位于“col1”这个范围内的其他列值,然后获取它们的范围。随后获取落在此范围内的计数(记录)。我的问题更像是价格范围估计,新价格、以前价格和非常旧价格的一个列。因此,我的目标是生成新价格,并希望显示以前和旧价格范围是多少,以及有多少记录受到影响。

标签: python pandas sorting dataframe data-manipulation


【解决方案1】:

您可以通过pd.cut 的列进行操作

首先根据最大的获取bin

bins = [2*i for i in range(df['c1'].max()// 2+1)]

[0, 2, 4, 6, 8, 10]

然后申请cut

df.apply(pd.cut, bins=bins)['c1'].value_counts()

(8, 10]    5
(2, 4]     5
(6, 8]     2
(4, 6]     2
(0, 2]     1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多