【问题标题】:Indexing Row Values Based on Value of Each Column根据每列的值索引行值
【发布时间】:2015-01-05 16:21:46
【问题描述】:

我有一个 8r x 10c 数据框,我想通过将每行中的值除以其列中的第一个值来复制数据框(即“索引”每列,第一个值 = 100)。

所以如果我从...开始

ColA ColB ColC
1000 2000 3000
2000 3000 9000

它会返回...

ColA ColB ColC
 100  100  100
 200  150  300

是否有一个简单的命令可以做到这一点,还是某种循环?

【问题讨论】:

  • 当你说“数据框”时,你是指pandas.DataFrame吗?如果您使用的是其他数据结构,请告诉我们它是什么(列表列表、NumPy 数组等)。
  • 抱歉,是的——一个 Pandas 数据框。
  • 您的示例中的第一列已除以 10...不应该除以 1000(因为这是该列中的第一个值)?
  • 我希望每列中的第一个值为 100,其他所有内容都被索引到该值。所以第一列的值为 x/10,第二列的值为 x/20,第三列的值为 x/30(等等)。

标签: python pandas dataframe


【解决方案1】:

您可以执行以下操作:

>>> df / (df.iloc[0] / 100)
   ColA ColB ColC
0   100  100  100
1   200  150  300

df.iloc[0] 选择第一行。将其除以 100 以获得一行值来调整每一列。最后,我们将整个 DataFrame 除以这一新行值。默认情况下沿轴 0 进行除法(即沿每列向下)。

等效的操作是df / df.iloc[0] * 100

【讨论】:

  • 太棒了——谢谢。知道必须有一个简单的方法来做到这一点。
  • iloc 可以选择第一行,但除法失败。我将假设这是我缺乏 Python 知识,并且我遗漏了一些明显的东西,但是如果有人知道它不能按所介绍的那样工作的原因,请告诉我。
  • @WDCR:您在尝试除法时是否收到特定的错误消息?
  • OK - 在堆栈跟踪的底部应该有一个简短的错误消息,例如以ValueErrorTypeError 或类似名称开头。它是什么,它说了什么?
  • 原来问题是隐藏的索引列。以另一种方式解决了这个问题,但似乎 .iloc 可以工作。
猜你喜欢
  • 2020-03-05
  • 2016-11-14
  • 2022-08-09
  • 2020-12-28
  • 2020-06-23
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 2015-09-03
相关资源
最近更新 更多