Reputation: 2324
I have this simplified dataframe:
ID Fruit
F1 Apple
F2 Orange
F3 Banana
I want to add in the begining of the dataframe a new column df['New_ID']
which has the number 880
that increments by one in each row.
The output should be simply like:
New_ID ID Fruit
880 F1 Apple
881 F2 Orange
882 F3 Banana
I tried the following:
df['New_ID'] = ["880"] # but I want to do this without assigning it the list of numbers literally
Any idea how to solve this?
Thanks!
Upvotes: 116
Views: 285971
Reputation: 1582
If you have a long, chained expression, and you want to add a column with incrementing values, but you don't know the length of the dataframe (due to some of the chained expressions being groups or aggregations) you can also accomplish this by using assign()
and a lambda
df.assign(New_ID = lambda x: range(880, 880 + len(x))
Upvotes: 3
Reputation: 8683
Here:
df = df.reset_index()
df = df.rename(columns={"index":"New_ID"})
df['New_ID'] = df.index + 880
Upvotes: 93
Reputation: 502
I used the follow code:
df.insert(0, 'id', range(1, 1 + len(df)))
So my "id" columns is:
1, 2, 3, ...
Upvotes: 10
Reputation: 2887
For a pandas DataFrame whose index starts at 0 and increments by 1 (i.e., the default values) you can just do:
df.insert(0, 'New_ID', df.index + 880)
if you want New_ID
to be the first column. Otherwise this if you don't mind it being at the end:
df['New_ID'] = df.index + 880
Upvotes: 2
Reputation: 21
import numpy as np
df['New_ID']=np.arange(880,880+len(df.Fruit))
df=df.reindex(columns=['New_ID','ID','Fruit'])
Upvotes: 2
Reputation: 490
You can also simply set your pandas column as list of id values with length same as of dataframe.
df['New_ID'] = range(880, 880+len(df))
Reference docs : https://pandas.pydata.org/pandas-docs/stable/missing_data.html
Upvotes: 33
Reputation: 109520
df = df.assign(New_ID=[880 + i for i in xrange(len(df))])[['New_ID'] + df.columns.tolist()]
>>> df
New_ID ID Fruit
0 880 F1 Apple
1 881 F2 Orange
2 882 F3 Banana
Upvotes: 10