【发布时间】:2020-06-24 21:35:49
【问题描述】:
我有一个三列的表。假设第一行充满了一些人的名字。第二个和第三个是代表他们花费的价值的数字。我想用这些人的子集构建另一个表,其中这个新表的每一列的总和给出一个特定的值。我如何在 Python 中做到这一点?
示例:这是我的桌子
Col1 Col2 Col3
John 10 100
Andrew 5 50
Martha 8 20
Ana 2 5
假设我想要一个组合,其中第二列总和为 20,第三列总和为 125。结果将是:
Col1 Col2 Col3
John 10 100
Martha 8 20
Ana 2 5
注意:当然,有时可能无法准确得出总和。如果代码接受一些近似值,比如从 0,9X 到 1,1X,是我想要的总和,它会很好。 此外,我不需要获取特定数量的行。它可以是 2、3、...、n 的组合。
【问题讨论】:
-
如果需要 sum = 10 在这种情况下,
John&Martha和Ana的行会是可接受的结果吗? -
@DOOM 这将取决于第三列的总和。我会传递两个参数,第二列的总和和第三列的总和。
-
我想我的问题是,如果您的条件导致多种组合会发生什么,这是可以接受的结果吗?
-
@DOOM 我猜有两个合理的选项:1) 两个选项都出现,用户选择一个 2) 任何一个选项都被选中(没关系)
-
@dekio 您可以执行
df['Col2'].cumsum()和df['Col3'].cumsum(),然后根据您想要的 cumsum 值对 df 进行切片。但这将按照df中行的顺序选择行(或者可以对df进行排序,但它仍然会以相同的排序顺序获得子集)。我想这不是你所期望的。
标签: python pandas python-2.7 numpy