用行号填充新的 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 列的主要内容,如果未能解决你的问题,请参考以下文章