用行号填充新的 pandas 列

Posted

技术标签:

【中文标题】用行号填充新的 pandas 列【英文标题】:Fill a new pandas column with row numbers 【发布时间】:2018-09-09 12:26:15 【问题描述】:

我有以下带有随机索引值的 DataFrame data

      A   B
100   0   7
203   5   4
5992  0  10
2003  9   8
20   10   5
12    6   2

我想添加一个带有行号的新列“C”。例如:

      A   B   C
100   0   7   0
203   5   4   1
5992  0  10   2
2003  9   8   3
20   10   5   4
12    6   2   5

【问题讨论】:

【参考方案1】:

使用numpy.arange 的长度为DataFrame

df['C'] = np.arange(len(df))

或者你可以使用DataFrame.shape,谢谢@Mehmet Burak Sayıcı:

df['C'] = np.arange(df.shape[0])

print (df)
       A   B  C
100    0   7  0
203    5   4  1
5992   0  10  2
2003   9   8  3
20    10   5  4
12     6   2  5

【讨论】:

这是我的错误,我认为如果 DataFrame 恰好是单列,但事实证明它是 Series 对象时会发生这种情况。我删除了评论以免混淆任何人。 这会在前面添加一个没有名称的列,在末尾添加一个名为 C 的列,对我来说都是自动递增的 @boardtc 第一列称为索引,我的解决方案不会更改它。只添加新列C @jezrael 谢谢我学到的是,当从 csv pandas 读取时,如果没有设置索引,则自动添加一个自动递增列作为第一列! 有没有办法做到这一点,我们可以得到按 A 分组的行号?【参考方案2】:

通过使用reset_index

df['C'] = df.reset_index().index
df

       A   B  C
100    0   7  0
203    5   4  1
5992   0  10  2
2003   9   8  3
20    10   5  4
12     6   2  5

概括地说:

df['C'] = df.index if df.index.is_monotonic_increasing else range(len(df))
df

       A   B  C
100    0   7  0
203    5   4  1
5992   0  10  2
2003   9   8  3
20    10   5  4
12     6   2  5

【讨论】:

这很聪明。如果有人想知道该命令是如何工作的,它会创建一个具有常规/默认索引(默认情况下仅对行进行编号)的临时数据帧,从中获取索引,丢弃临时数据帧的其余部分,并分配给原始数据框,作为常规列。【参考方案3】:

我们可以添加行号作为第一列的新列,如下所示:

import pandas as pd
import numpy as np
df = pd.DataFrame('B': [1, 2, 3], 'C': [4, 5, 6])

    B   C
0   1   4
1   2   5
2   3   6

df.insert(loc=0, column='A', value=np.arange(len(df)))
    A   B   C
0   0   1   4
1   1   2   5
2   2   3   6

【讨论】:

以上是关于用行号填充新的 pandas 列的主要内容,如果未能解决你的问题,请参考以下文章

使用行号更新列

如何用熊猫计算某些列的excel行号[重复]

将行号列添加到 IList<T>

如何在dxdbgrid的首列,加个自动序号列?

excel公式问题,获取行号列号之后,如何获取该单元格内的值。

SQL server 2008中 怎样用update 修改指定行号列号的数据?