【问题标题】:Counting rows after splitting df拆分df后计算行数
【发布时间】:2019-08-14 13:09:22
【问题描述】:

我不得不将 df 分成 20 个相等的组(不是完全相等,有 6076 行)。现在我需要创建新的 df 列,其中每个单元格等于每组中的行数。例如,我有 20 个组,有 304 行,所以我需要列 'pool_size' 看起来像: 304在第一行,304在第二行,304在第三行......等等。

为了破解我使用的df:

>>> df_split = np.array_split(df, 20)

谢谢!

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    你可以试试:

    pd.DataFrame([df.shape[0] for df in df_split], columns=['pool_size'])
    

    结果:

        pool_size
    0          16
    1          16
    2          16
    3          16
    4          15
    5          15
    6          15
    7          15
    8          15
    9          15
    10         15
    11         15
    12         15
    13         15
    14         15
    15         15
    16         15
    17         15
    18         15
    19         15
    

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解这些问题,但您可以尝试通过以下方式为每行添加值等于 304 的列“pool_size”:

          df["pool_size"] = 304
      

      编辑: 通过 np.array_split 拆分数据框后,您将获得一个数据框列表,因此您可以遍历列表并通过 .shape 检查每一行的大小。然后你可以通过上面的代码更新那个 df。它应该看起来像这样,但我还没有检查过。

          for df_ in df_split:
              df_["pool_size"] = df_.shape[1]
      

      【讨论】:

      • 我很乐意这样做,但是其中一组有更多行,我不确定哪一个)))因为原始 df 中的总行数是 6076...实际上我不是确定到底有多少行,但我认为如果我无法找到另一个解决方案,我只会检查每个组,并会完全按照你的建议做。谢谢!
      • 哦,好吧,因为每一行的长度不同,您可以循环外部数组并检查每个内部数组的长度,同时更改 pool_size 列。您可以使用 nditer 循环遍历数组,然后使用 .size.shape 检查每个数组的大小。这有帮助吗?
      【解决方案3】:

      我可能不明白,但你不能用:

      df_split.shape[0] #for length/row numbers in DF
      

      (或 df_split.shape[1] 表示宽度)

      【讨论】:

      • 谢谢!有 20 组)这一组成功计算了整个 df 或拆分 df 中的一组,但不幸的是不是每个组
      猜你喜欢
      • 2020-07-23
      • 2020-11-03
      • 2022-11-06
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多