Pandas Dataframe .loc +在非唯一的日期时间索引上更新?



有一个DataFrame的时间戳(%Y-%m-%d)索引,我希望能够更新单行,知道日期时间索引值,使用。loc。

我知道索引是非唯一的,这意味着我偶尔会得到多于我想要更新的行。因此,我在第二列上对DataFrame进行了排序,这样我想要更新的行将始终是该索引值的最后一行。

所讨论的DataFrame是一个更大的DataFrame的子集副本,并且不使用.loc设置值不能工作-因此我限制使用.loc

我的问题:是否有一种方法,我可以引用这最后一行的索引值和更新它,纯粹基于索引?

显然,只使用索引值将更新带有该索引的所有行,argmax似乎不适用于时间戳,尽管我可以临时重新创建索引以使用我排序的另一列,但如果有直接的方法,我宁愿不使用这个三步解决方案。

请参阅下面的示例DataFrame代码-我所要的是一种方法来更新行与df['sort']=='d',我知道这将是索引的最后一个,如果可能的话,完全基于索引值。

l1 = [datetime.today().date()] * 4
l2 = list(range(1,5))
l3 = ['a','b','c','d']
df= pd.DataFrame(list(zip(l1,l2,l3)),columns=['datetime','value','sort'])
df.set_index('datetime',inplace=True)
df
Out[1317]: 
value sort
datetime              
2021-10-22      1    a
2021-10-22      2    b
2021-10-22      3    c
2021-10-22      4    d
df.loc[df.index[-1].argmax()]
Traceback (most recent call last):
File "<ipython-input-1318-e1758b122814>", line 1, in <module>
df.loc[df.index[-1].argmax()]
AttributeError: 'datetime.date' object has no attribute 'argmax'
df.loc[df.index[-1],'value'] = 5
df
Out[1320]: 
value sort
datetime              
2021-10-22      5    a
2021-10-22      5    b
2021-10-22      5    c
2021-10-22      5    d

如果要更改数据帧最后一行中特定列的值,可以尝试下面的代码

df.iloc[-1,0] = 5

1→最后一行数据帧

0→列"value"的索引

根据Udaya的答案,我需要的解决方案是:

df.iloc[-1, df.columns.get_loc('value')] = 5

相关内容

  • 没有找到相关文章

最新更新