【问题标题】:Calculating With GroupBy and Series Problem使用 GroupBy 和系列问题进行计算
【发布时间】:2021-07-14 14:45:06
【问题描述】:

我有一个如下所示的数据框:

    ID        OLD  QTD
1   15295       7   1   
2   15295       7   1   
3   15295       7   1   
4   15801       5   1   
5   23369       7   1   
6   23369       7   1   
7   23369       7   1   
8   23369       7   1   
9   38004       6   1   
10  38004       6   1   
11  38004       6   1

我正在对数据框进行操作,在此之前:

df.groupby('ID').apply(lambda x: x['QTD'].sum()/5)

它正在返回这个:

ID
15295   0.429
15801   0.200
23369   0.571
38004   0.500

但后来我注意到我必须更改为:

df.groupby('ID').apply(lambda x: x['QTD'].sum()/x['OLD'])

现在它返回这个:

ID    
15295    0    0.429
         1    0.429
         2    0.429
15801    3    0.200
23369    4    0.571
         5    0.571
         6    0.571
         7    0.571
38004    8    0.500
         9    0.500
         10   0.500

OLD 是一系列整数值。我不得不更改,因为它们从 ID 到 ID 不同,而不是在它是一个固定整数 (5) 之前。 如何让第二个操作像以前一样只检索 ID 和浮点值?每个 ID 一行简单吗?

我不确定为什么会发生这种情况,但我不希望一个 ID 有多行,我希望一个 ID 有一行,而这些行中的最后一个值。像这样:

   ID
    15295   0.429
    15801   0.200
    23369   0.571
    38004   0.500

帮助非常感谢!

【问题讨论】:

  • 你能添加一些输入样本 dtaa 和预期输出吗?
  • 嗨!我只是包含了更多信息。希望现在好多了。
  • 超级棒,好多了。仅缺少相关数据的预期输出。
  • 我刚刚把它包括在内。我想要与以前几乎相同的输出,但具有新的条件。
  • 那么在预期输出中,0.60015295 计数如何?

标签: python pandas numpy math jupyter-notebook


【解决方案1】:

如果需要聚合输出,则需要为每个组的标量过滤OLD 的第一个值,否则如果将Series x['OLD'] 传递给GroupBy.apply,它会为每个组返回具有相同大小的行,例如Series x['OLD']

df = df.groupby('ID').apply(lambda x: x['QTD'].sum()/x['OLD'].iat[0])
print (df)
ID
15295    0.428571
15801    0.200000
23369    0.571429
38004    0.500000
dtype: float64

【讨论】:

    猜你喜欢
    • 2017-01-15
    • 2021-09-01
    • 2020-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多