Pyd
Pyd

Reputation: 6159

How to update some of the rows from another series in pandas using df.update

I have a df like,

    stamp   value
0   00:00:00    2
1   00:00:00    3
2   01:00:00    5

converting to time delta

df['stamp']=pd.to_timedelta(df['stamp'])

slicing only odd index and adding 30 mins,

odd_df=pd.to_timedelta(df[1::2]['stamp'])+pd.to_timedelta('30 min')
#print(odd_df)
1  00:30:00
Name: stamp, dtype: timedelta64[ns]

now, updating df with odd_df,

as per the documentation it should give my expected output.

expected output:

df.update(odd_df)
#print(df)
    stamp   value
0   00:00:00    2
1   00:30:00    3
2   01:00:00    5

What I am getting,

df.update(odd_df)
#print(df)

    stamp   value
0   00:30:00    00:30:00
1   00:30:00    00:30:00
2   00:30:00    00:30:00

please help, what is wrong in this.

Upvotes: 0

Views: 347

Answers (1)

rapidDev
rapidDev

Reputation: 119

Try this instead:

df.loc[1::2, 'stamp'] += pd.to_timedelta('30 min')

This ensures you update just the values in DataFrame specified by the .loc() function while keeping the rest of your original DataFrame. To test, run df.shape. You will get (3,2) with the method above.

In your code here:

odd_df=pd.to_timedelta(df[1::2]['stamp'])+pd.to_timedelta('30 min')

The odd_df DataFrame only has parts of your original DataFrame. The parts you sliced. The shape of odd_df is (1,).

Upvotes: 1

Related Questions