【问题标题】:How to insert a value in a column's specific ranging rows, according to a condition. Pandas如何根据条件在列的特定范围行中插入值。熊猫
【发布时间】:2021-11-06 17:30:59
【问题描述】:

我正在处理一个数据框,它有一个名为 season 的列(新创建,np.nan 已填充),另一列是 ma​​tch_id,它的值类似于:match 1 有 ma​​tch_id 1,匹配 2 有 ma​​tch_id 2,...,匹配 n 有 ma​​tch_id n。它是 cricket(接近棒球)数据集,因此是逐个球的。 1 场比赛最多有 20+20 球(每场球有 6 个球)。所以 ma​​tch_id 1 大约是从索引 0 到 240。然后 ma​​tch_id 2 大约是从索引 241 到 480。数据是逐球(1 球 1 行)/逐场比赛(1 场比赛约 240 行)/逐赛季(1 赛季约 14160 行)。

我的条件是如果ma​​tch_id是从159,把2017放在那些季节列行。

在我的数据集中 ma​​tch_id 和其他列预先存在。我创建了 np.nan 列 season,现在我想填充它。

我的数据看起来像,

In[]: df_raw.head(6)
out[]:
    season  match_id    inning  batting_team         bowling_team                  over ball
0   NaN     1           1       Sunrisers Hyderabad  Royal Challengers Bangalore   1    1
1   NaN     1           1       Sunrisers Hyderabad  Royal Challengers Bangalore   1    2
2   NaN     1           1       Sunrisers Hyderabad  Royal Challengers Bangalore   1    3
3   NaN     1           1       Sunrisers Hyderabad  Royal Challengers Bangalore   1    4
4   NaN     1           1       Sunrisers Hyderabad  Royal Challengers Bangalore   1    5
5   NaN     1           1       Sunrisers Hyderabad  Royal Challengers Bangalore   1    6

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    或者使用loc函数:

    df.loc[(df['match_id']<=59) & (df['match_id']>=1), 'season'] = 2017
    

    请注意,由于season 列包含 NaN,它将被存储为浮点数。填写完season 值后,您可以将这些值转换为整数

    df['season'] = df['season'].astype('int')
    

    【讨论】:

      【解决方案2】:

      我将过程分为两个步骤,但您也可以将两个步骤合并为一行。

      先检查match_id是否在指定范围内,然后根据条件用想要的值覆盖。

      df['season'] = df['match_id'].isin(range(1,60)
      df['season'] = df['season'].apply(lambda x: 2017 if x else np.nan)
      

      【讨论】:

        猜你喜欢
        • 2017-10-14
        • 2015-10-22
        • 2020-06-21
        • 1970-01-01
        • 2022-01-01
        • 1970-01-01
        • 2019-01-25
        • 2021-06-04
        • 2020-05-28
        相关资源
        最近更新 更多