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

2024-04-29 13:49:28 发布

您现在位置:Python中文网/ 问答频道 /正文

希望这是一个非常简单的问题,我还没有找到解决方案。我有一个带有时间戳(%Y-%m-%d)索引的数据帧,我希望能够使用.loc更新单行,知道datetime索引值

我知道索引是非唯一的,这意味着偶尔我会得到比我想要更新的行更多的内容。因此,我在第二列上对数据帧进行了排序,以便我要更新的行始终是该索引值的最后一行

所讨论的数据帧是一个大得多的数据帧的子集副本,在不使用.loc的情况下设置一个值是不起作用的-因此我限制使用.loc

我的问题是:是否有一种方法可以引用最后一行作为索引值并根据索引进行更新? 显然,仅使用索引值将使用该索引更新所有行,argmax似乎不适用于时间戳,尽管我可以临时重新创建索引以使用我排序的另一列,但如果有直接方法,我宁愿不使用此三步解决方案

请参阅下面的示例数据帧代码-我想要的是一种使用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

0条回答
网友
1楼 · 发布于 2024-04-29 13:49:28

因此,使用上面Udaya的答案,我需要的解决方案是df.iloc[-1, df.columns.get_loc('value')] = 5

网友
2楼 · 发布于 2024-04-29 13:49:28

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

df.iloc[-1,0] = 5

-1->;数据帧的最后一行

0->;“值”列的索引

相关问题 更多 >