【问题标题】:Assign values to a pandas dataframe column filtered by index and column将值分配给按索引和列过滤的 pandas 数据框列
【发布时间】:2019-08-11 03:31:02
【问题描述】:

我有一个带有 DateTime 索引的 pandas DataFrame 和两个名为 'text''labels' 的列。我想分配labels which have value =2 的值并位于value =50 的日期时间索引范围内

我试过用,

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 是 DateTime 索引,'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 但如果我们将其设置为等于某个值则不分配它

在为标签 = 50 分配 '2017-02-01 05:03:25+00:00':'2017-02-01 05:05:55+00:00'labels =2 之间创建的 DataFrame 时,我希望结果是这样的

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

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    让我们做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
    

    【讨论】:

    • 完美运行!!所以我们应该把两个条件都作为行过滤器给出
    猜你喜欢
    • 2022-06-20
    • 2015-08-11
    • 1970-01-01
    • 2019-10-26
    • 2022-01-03
    • 2022-10-30
    • 2021-04-11
    • 1970-01-01
    • 2016-10-16
    相关资源
    最近更新 更多