I have the following dataframe:
index, col_name, extra_col
1, item_1, stuff
2, item_2, stuff
3, item_3, stuff
4, item_4, stuff
5, item_5, stuff
6, item_6, stuff
7, item_7, stuff
8, item_8, stuff
9, item_9, stuff
on which I'm applying the following transformation:
df = df.sort_values(by = 'col_name')
df['yPos'] = np.arange(len(df)) // 3
df['xPos'] = df.groupby(["yPos"]).rank(method='first')-1
df = df.astype({'x': 'int'})
I want to add two columns to my dataframe xPos
and yPos
. yPos
column is working fine. however I have the following error when running the line with the xPos
column:
Wrong number of items passed 2, placement implies 1
What's wrong?
CodePudding user response:
Your code produced results of multiple columns when you attempt to assign it to one column xPos
. Hence, the error. You can instead rank only on yPos
to get the relative serial number in xPos
.
Change your codes as follows:
df = df.sort_values(by = 'col_name')
df['yPos'] = np.arange(len(df)) // 3
df['xPos'] = df.groupby("yPos")['yPos'].rank(method='first')-1
df = df.astype({'xPos': int})
Result:
print(df)
index col_name extra_col yPos xPos
0 1 item_1 stuff 0 0
1 2 item_2 stuff 0 1
2 3 item_3 stuff 0 2
3 4 item_4 stuff 1 0
4 5 item_5 stuff 1 1
5 6 item_6 stuff 1 2
6 7 item_7 stuff 2 0
7 8 item_8 stuff 2 1
8 9 item_9 stuff 2 2