更改数据框索引值,同时保持其他列数据相同

Posted

技术标签:

【中文标题】更改数据框索引值,同时保持其他列数据相同【英文标题】:Change dataframe index values while keeping other column data same 【发布时间】:2013-08-22 04:17:57 【问题描述】:

我有一个包含 4 列和 251 行的 DataFrame,以及一个由数字组成的索引,例如1000 到 1250 。该索引最初是帮助连接来自 4 个不同数据帧的数据所必需的。但是,一旦我将 4 列放在一起,我想将索引更改为从 250 到 0 的数字级数。这是因为我将对不同的数据集(4 组)执行相同的操作不同的指数,例如2000 到 2250 或 500 到 750,但都具有相同的行数。 250 到 0 是统一这些数据集的一种方式,但我不知道如何做到这一点。即我正在寻找用函数 range(250, 0, -1) 替换任何现有索引的东西

我尝试过使用下面的 set_index 以及其他一大堆总是返回错误的尝试,

df.set_index(range(250, 0, -1), inplace=True) 

并且在我能够将 df 的索引设置为范围的情况下,4 列中的数据更改为 NaN,因为它们没有与新索引匹配的数据。如果这是初步的,我深表歉意,但我在 python/pandas 的世界里已经一周大了,10 岁以上还没有编程,并且花了 2 天时间来尝试为自己解决这个问题,但现在是时候了哭……大叔!!

【问题讨论】:

【参考方案1】:

尝试先将 250:0 索引作为一列引入,然后将它们设置为索引:

df = pd.DataFrame('col1': list('abcdefghij'), 'col2': range(0, 50, 5))
df['new_index'] = range(30, 20, -1)
df.set_index('new_index')

之前:

  col1  col2  new_index
0    a     0         30
1    b     5         29
2    c    10         28
3    d    15         27
4    e    20         26
5    f    25         25
6    g    30         24
7    h    35         23
8    i    40         22
9    j    45         21

之后:

          col1  col2
new_index           
30           a     0
29           b     5
28           c    10
27           d    15
26           e    20
25           f    25
24           g    30
23           h    35
22           i    40
21           j    45

【讨论】:

感谢您的快速响应,我刚刚尝试过,我相信我遇到了某种数据类型冲突。我可以将 250:0 作为一列添加到数据集,set_index 命令不会引发任何错误,但是当我查看数据框时,我仍然拥有以 250:0 作为最后一列的旧索引。下面是我在执行 set_index 命令时得到的输出 我没有像你那样在我的代码中使用inplace=True 参数,所以它实际上并没有修改df,只是返回一个设置了这些索引的新数据框。添加该参数,或将结果分配给新变量,您应该会很好。 全部解决。感谢并抱歉我之前的回复不完整。【参考方案2】:

你可以这样做

df.index = range(250, 0, -1)

还是我错过了什么?

【讨论】:

是的,这个答案更好,因为它避免了在设置索引之前创建额外的列。

以上是关于更改数据框索引值,同时保持其他列数据相同的主要内容,如果未能解决你的问题,请参考以下文章

比较两个(py)spark sql数据框并在保持连接列的同时有条件地选择列数据

将大型 csv 加载到数据框中,同时保持列结构

在保持二级索引完整的同时对多索引数据框中的行进行排序

R - 如何在保持其他列静止的同时对单个列进行热编码?

如何应用滚动平均函数,同时及时保持所有具有重复索引的观测值

排序多索引数据框保持索引排序