Pandas 如何在新的列中填充行号
在本文中,我们将介绍如何在Pandas中使用.index
和.reset_index()
方法来获取行号,并在新的列中填充这些行号。
阅读更多:Pandas 教程
获取行号
Pandas中的每个DataFrame都有一个唯一的索引,可以用来区分不同的行。.index
方法可以获取这个索引:
import pandas as pd
df = pd.DataFrame({'A': [10, 20, 30], 'B': [40, 50, 60]})
print(df.index)
输出:
RangeIndex(start=0, stop=3, step=1)
这个索引是一个RangeIndex
对象,表示从0开始,步长为1,到3结束(不包括3)的一系列数字。
我们可以将这个索引赋值给一个新的列:
df['Index'] = df.index
print(df)
输出:
A B Index
0 10 40 0
1 20 50 1
2 30 60 2
这样就可以在新的列中填充行号了。
重新设置索引
如果原来的索引不是数字,而是字符串、日期等非数字类型,那么可以使用.reset_index()
方法来重新设置索引。这个方法会在最前面增加一列,包含行号,然后将原来的索引移到最后一列。默认情况下,.reset_index()
方法不会改变原来的DataFrame,而是返回一个新的DataFrame。例如:
df = pd.DataFrame({'A': [10, 20, 30], 'B': [40, 50, 60]}, index=['a', 'b', 'c'])
new_df = df.reset_index()
print(new_df)
输出:
index A B
0 a 10 40
1 b 20 50
2 c 30 60
其中index
是新的一列,包含原来的索引。
如果想要改变原来的DataFrame,可以使用inplace=True
参数:
df.reset_index(inplace=True)
print(df)
输出:
index A B
0 a 10 40
1 b 20 50
2 c 30 60
现在df
已经变成了新的DataFrame。
填充行号
有了行号,就可以在新的列中填充了:
df['RowNum'] = df.index + 1
print(df)
输出:
index A B RowNum
0 a 10 40 1
1 b 20 50 2
2 c 30 60 3
现在RowNum
列中包含了行号,而且行号从1开始,因为我们把index+1
赋值给了这一列。
使用Lambda函数
有时候,我们需要根据DataFrame的某些特征来填充行号。例如,我们有一个DataFrame,包含多个组的数据,每个组的行号都应该从1开始。可以使用Lambda函数来实现:
df = pd.DataFrame({'Group': ['A', 'A', 'A', 'B', 'B', 'B'], 'Value': [10, 20, 30, 40, 50, 60]})
df['RowNum'] = df.groupby('Group').apply(lambda x: x.index + 1).values
print(df)
输出:
Group Value RowNum
0 A 10 1
1 A 20 2
2 A 30 3
3 B 40 1
4 B 50 2
5 B 60 3
其中,df.groupby('Group').apply(lambda x: x.index + 1)
返回的是一个Series,包含了每个组的行号。接着使用.values
方法,将这个Series转换成一个numpy数组。最后,将这个新的numpy数组赋值给一个新的列RowNum
,就完成了行号的填充。这个方法有点复杂,但是可以应对一些特殊的需求。
总结
Pandas提供了简单的方法来获取DataFrame中的行号,以及在新的列中填充这些行号。使用df.index
可以获取行号,使用df.reset_index()
可以重新设置索引,并在最前面增加包含行号的列。使用groupby()
可以对DataFrame进行分组,使用Lambda函数可以根据某些特征来填充每个组内的行号。