按索引和列过滤后,为pandas数据框的列赋值

3

我有一个带有日期时间索引和两列名为'text''labels'的pandas DataFrame。我想要将值为2的标签赋值给在值为50的日期时间范围内且存在于DataFrame中的标签。

我尝试使用以下方法:

df[df['labels']==2]['2017-02-01 05:03:25+00:00':'2017-02-01 05:05:55+00:00']['labels']=50

我可以查看按DataTime索引(行)和列筛选的DataFrame,但无法对其进行分配。同时也尝试了以下方法:
df.loc[df['2017-03-13 00:00:00':'2017-03-23 00:00:00'], df['labels']==2]=50

但它抛出了一个错误。

df看起来像这样

created                                text                      labels
2017-02-01 05:03:25+00:00   break john cena eyelash grow            4
2017-02-01 05:05:55+00:00   eyelash tooooo much sweeti definit      2
2017-02-01 05:14:57+00:00   come eyelash                            2

created是日期时间索引,'text'和'labels'是DataFrame的列

df[df['labels']==2]['2017-02-01 05:03:25+00:00':'2017-02-01 05:05:55+00:00']['labels'] 

筛选DataFrame但不将其赋值为一个值

将DataFrame分配给创建时间在'2017-02-01 05:03:25+00:00':'2017-02-01 05:05:55+00:00'之间并且标签为2,对于标签为50的情况,我期望结果如下:

created                                text                      labels
2017-02-01 05:03:25+00:00   break john cena eyelash grow            4
2017-02-01 05:05:55+00:00   eyelash tooooo much sweeti definit      50
2017-02-01 05:14:57+00:00   come eyelash                            2
1个回答

4

让我们来使用 get_level_values 方法

s=df.index.get_level_values(0)
m=(s>'2017-02-01 05:03:25+00:00') & (s<='2017-02-01 05:05:55+00:00')
df.loc[m&(df.labels==2),'lable']=50

完美运行!因此,我们应该同时给出作为行过滤器的条件。 - Sanjay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接