【问题标题】:Python - Replace years by Index/ValuePython - 用索引/值替换年份
【发布时间】:2020-06-26 07:29:29
【问题描述】:

我有一个问题。我有一个结构化的 numpy 数组,其年份数如下:

array_start([(2020),
(2020),
(2021),
(2021),
dtype=[('year', '<i8')])

在这个例子中,2020 年是最早的年份,但这可能会改变,所以我不能真正使用硬编码或使用字典。我想用这样的计数/索引替换年份列:

array_desired_1([(1),
(1),
(2),
(2),
dtype=[('year', '<i8')])

或者:

array_desired_2([(1, 2020),
(1, 2020),
(2, 2021),
(2, 2021),
dtype=[('year', '<i8'), ('index', '<i8')])

到目前为止,我唯一得到的就是找到一种方法来获取最早的年份:

earlies_year_mask = array_start['year'] == np.amin(array_start['year'])

但我不认为我在这方面的正确轨道......有人可以帮助我吗?这应该很容易,但我无法得到正确的答案..

【问题讨论】:

  • 索引排序重要吗?比如,2020 年可以是2,2021 年可以是1吗?
  • 是的,好点:顺序非常重要。

标签: python numpy indexing


【解决方案1】:

很难准确说出您要问什么,但是在使用 df 和访问 df.year 作为属性之间,您似乎实际上是在使用 pandas DataFrame (或者Series?)。

如果是DataFrame,我猜year是垂直方向的列,在这种情况下你可以这样做:

df.year = np.arange(1, len(df) + 1)

如果是Series,你可以这样做:

df = pd.Series(df.index + 1)

=============

编辑:

啊,我想我明白你现在在说什么了。这个(类似的解决方案)怎么样?

array_start['year'] = np.arange(1, array_start.shape[0] + 1)

【讨论】:

  • 嗨,对不起,这真的是一个 numpy arra,我会稍微编辑一下代码
  • hmm,当我这样做时,它只是用索引替换年份,每一行都不同,如下所示:array([(1), (2), (3), (4), dtype=[('年份', '
【解决方案2】:

啊,我找到了答案! :

year_count = 1

for year in np.unique(array_start['year']):
    array_start['year'][array_start['year'] == year] = year_count
    year_count = year_count + 1

任何没有循环或更有效的答案仍然非常受欢迎:)

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 2011-10-02
    • 2016-12-15
    相关资源
    最近更新 更多