如果另一列中的值较低(没有for循环),则汇总一列

up

数据框

我有很多项目的数据框。

这些物品由代码“类型”和重量来标识。

最后一栏表示数量。

|-|------|------|---------|
| | type |weight|quantity |
|-|------|------|---------|
|0|100010|   3  |  456    |
|1|100010|   1  |  159    |
|2|100010|   5  |  735    |
|3|100024|   3  |  153    |
|4|100024|   7  |  175    |
|5|100024|   1  |  759    |
|-|------|------|---------|

相容性规则

如果满足以下条件,则给定项目“ A”与其他项目“兼容”:

  • 同类型
  • 其他物品的重量等于或小于物品“ A”的重量

预期结果

我想为每一行添加一列“兼容数量”,以计算兼容的项目数量。

|-|------|------|---------|---------------------|
| | type |weight|quantity | compatible quantity |
|-|------|------|---------|---------------------|
|0|100010|   3  |  456    |        615          | 456 + 159
|1|100010|   1  |  159    |        159          | 159 only (the lightest items)
|2|100010|   5  |  735    |       1350          | 735 + 159 + 456 (the heaviest)   
|3|100024|   3  |  153    |        912          | 153 + 759
|4|100024|   7  |  175    |       1087          | ...
|5|100024|   1  |  759    |        759          | ...
|-|------|------|---------|---------------------|

我想避免使用For循环ti获得此结果。(数据帧很大)。

我的代码使用For循环

import pandas as pd 

df = pd.DataFrame([[100010, 3, 456],[100010, 1, 159],[100010, 5, 735], [100024, 3, 153], [100024, 7, 175], [100024, 1, 759]],columns = ["type", "weight", "quantity"])

print(df)

for inc in range(df["type"].count()):

    the_type = df["type"].iloc[inc]
    the_weight = df["weight"].iloc[inc]
    the_quantity = df["quantity"].iloc[inc]

    df.at[inc,"quantity_compatible"] = df.loc[(df["type"] == the_type) & (df["weight"] <= the_weight),"quantity"].sum()

print(df)

一些可能的想法

  • “应用”或“转换”会有所帮助吗?
  • 可以在loc内使用loc来完成吗?
奕奕

首先按weight对值进行排序type,然后进行groupbyfor cumsum,最后对索引进行合并:

df = pd.DataFrame([[100010, 3, 456],[100010, 1, 159],[100010, 5, 735], [100024, 3, 153], [100024, 7, 175], [100024, 1, 759]],columns = ["type", "weight", "quantity"])

new_df = df.merge(df.sort_values(["type","weight"])
                  .groupby("type")["quantity"]
                  .cumsum(),left_index=True, right_index=True)

print (new_df)

#
     type  weight  quantity_x  quantity_y
0  100010       3         456         615
1  100010       1         159         159
2  100010       5         735        1350
3  100024       3         153         912
4  100024       7         175        1087
5  100024       1         759         759

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在没有循环引用的情况下汇总同一列中的一列

来自分类Dev

如何在熊猫中另一列的值之间汇总一列中的值

来自分类Dev

如果一列中的观测值与R中另一列的名称相等,则循环以分配值

来自分类Dev

汇总一列中的值并按R中的另一列分组

来自分类Dev

根据另一列的汇总在一列中填充空值

来自分类Dev

如果另一列中的值在列表中,则更改一列中的值[R]

来自分类Dev

汇总一列中的bigint值

来自分类Dev

如何根据没有循环的另一列替换列(数据框)中组的所有相同值?

来自分类Dev

如果另一列中没有列范围内的值,请替换为NA

来自分类Dev

如果另一列匹配,则添加一列的所有值

来自分类Dev

MySQL-如果列中有值,则在另一列中插入值

来自分类Dev

如果另一列中的值> 0,则创建具有逻辑值的新列

来自分类Dev

在另一列中查找一列的值

来自分类Dev

根据数据框中另一列的值汇总和计算一列的唯一值

来自分类Dev

用另一列的值汇总多列

来自分类Dev

如果一列中的值大于另一列中的值,则交换R中各列中的值

来自分类Dev

将一列的值与另一列中的所有值进行比较

来自分类Dev

熊猫DataFrame。汇总列中的值取决于另一列中的值

来自分类Dev

SQL筛选一列中的所有值,但不在另一列中

来自分类Dev

查询另一列中没有相同值的列

来自分类Dev

在汇总另一列中的关联值时,如何更改一列中的年龄括号?

来自分类Dev

根据C#窗口中另一列的值汇总datagrid中的列值

来自分类Dev

计算一列在另一列中是否具有特定值

来自分类Dev

R dplyr基于Fun索引汇总一列值(另一列)

来自分类Dev

如何根据另一列的汇总获得一列的对应值?

来自分类Dev

SQL Group By并在另一列中汇总一列及其对应的值

来自分类Dev

如果一列值 >= 另一列值的 1/3 输入文本到另一列

来自分类Dev

如果另一列包含值,则过滤列值

来自分类Dev

如果索引组在另一列中具有相同的值,则过滤DataFrame

Related 相关文章

  1. 1

    在没有循环引用的情况下汇总同一列中的一列

  2. 2

    如何在熊猫中另一列的值之间汇总一列中的值

  3. 3

    如果一列中的观测值与R中另一列的名称相等,则循环以分配值

  4. 4

    汇总一列中的值并按R中的另一列分组

  5. 5

    根据另一列的汇总在一列中填充空值

  6. 6

    如果另一列中的值在列表中,则更改一列中的值[R]

  7. 7

    汇总一列中的bigint值

  8. 8

    如何根据没有循环的另一列替换列(数据框)中组的所有相同值?

  9. 9

    如果另一列中没有列范围内的值,请替换为NA

  10. 10

    如果另一列匹配,则添加一列的所有值

  11. 11

    MySQL-如果列中有值,则在另一列中插入值

  12. 12

    如果另一列中的值> 0,则创建具有逻辑值的新列

  13. 13

    在另一列中查找一列的值

  14. 14

    根据数据框中另一列的值汇总和计算一列的唯一值

  15. 15

    用另一列的值汇总多列

  16. 16

    如果一列中的值大于另一列中的值,则交换R中各列中的值

  17. 17

    将一列的值与另一列中的所有值进行比较

  18. 18

    熊猫DataFrame。汇总列中的值取决于另一列中的值

  19. 19

    SQL筛选一列中的所有值,但不在另一列中

  20. 20

    查询另一列中没有相同值的列

  21. 21

    在汇总另一列中的关联值时,如何更改一列中的年龄括号?

  22. 22

    根据C#窗口中另一列的值汇总datagrid中的列值

  23. 23

    计算一列在另一列中是否具有特定值

  24. 24

    R dplyr基于Fun索引汇总一列值(另一列)

  25. 25

    如何根据另一列的汇总获得一列的对应值?

  26. 26

    SQL Group By并在另一列中汇总一列及其对应的值

  27. 27

    如果一列值 >= 另一列值的 1/3 输入文本到另一列

  28. 28

    如果另一列包含值,则过滤列值

  29. 29

    如果索引组在另一列中具有相同的值,则过滤DataFrame

热门标签

归档