【问题标题】:Pandas dataframe - Sum a column wrt to values in another column熊猫数据框 - 将一列与另一列中的值相加
【发布时间】:2017-04-14 05:45:56
【问题描述】:

我有一个看起来像这样的数据:-

data = {"doc1" : {'a': 2 , 'b': 1,'c':3}, "doc2" :  {'a': 1 , 'b': 1,'c':3}, "doc3" : {'a': 1 , 'b': 1,'c':3}}

我将其转换为数据框:-

df = pd.DataFrame.from_dict(data,orient='index')

数据框看起来像这样:-

a c b doc1 2 3 1 doc2 1 3 1 doc3 1 3 1

现在我想对 b 列中的所有值求和,其中 a 列的值为 1。

所以我想要的值是 2。

有没有一种简单的方法来做到这一点,而不是遍历两列? 我查了其他帖子,发现this :-

这利用了 .loc 函数。 df.loc[df['a'] == 1, 'b'].sum()

但由于某种原因,我似乎无法使用我的数据框。

请告诉我。

谢谢。

【问题讨论】:

  • “但由于某种原因,我似乎无法让它与我的数据框一起工作。”您能否详细描述“某种原因”?您找到的答案应该有效。
  • 嘿,我让它与下面的答案一起工作。但我的代码也在做同样的事情。只有我弄乱了变量。因此,它失败了。非常感谢!

标签: python pandas dataframe col


【解决方案1】:

你很亲密。见下文。

>>> df[df['a'] == 1]['b'].sum()
2

不要使用.loc,而是先尝试过滤数据框(df[df['a'] == 1]),然后选择'b'列,然后求和。

编辑:我将把它留在这里以供将来参考,尽管根据您使用的 pandas 版本,您的解决方案应该有效(感谢@maxymoo)。我正在运行0.18.1,这两种方法都有效。

【讨论】:

  • 其实这应该等同于 OP 的代码......虽然也许它只是在最新版本的 pandas 中?
  • 嗯。你说得对。我正在运行pandas 0.18.1,他的解决方案仍然有效。
  • 您好,感谢您的快速回复。我尝试了代码,它运行良好,但我的数据框非常大,有 10k 列和超过 2k 行。我需要多次计算总和。当我使用上面的代码时,花了很多时间。有什么更快的方法吗?
  • 这几乎是一个不同的问题。您要过滤多少个不同的值?您要对多少列求和?上面的示例应该运行得非常快,只有 2k 行和 1 个列过滤器。听起来您正在寻找 groupby 方法。
  • 我正在做与我上面提到的完全相同的事情,但规模更大。遍历 2k 行并遍历所有类似于 30k 的列,但一次只考虑一列到另一列。
猜你喜欢
  • 2021-08-30
  • 2017-12-08
  • 2022-01-23
  • 1970-01-01
  • 2019-01-20
  • 2022-01-23
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多