【问题标题】:Start list from a specific element从特定元素开始列表
【发布时间】:2023-02-21 20:55:14
【问题描述】:

我想问你一个简单的问题。

也就是说,我有一个数据框,其中一列包含多行,如下所示:

10712   99883522686 [10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10714   9998240348  [10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10715   99997364349 [10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9]`

我想重新设计这个列表,仅当第三个元素是数字 12 时才从它的第三个元素开始,就像这里的这个例子一样,这样我在所有行中都会得到一个看起来像这样的列表。

10712   99883522686 [12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10714   9998240348  [12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10715   99997364349 [12, 1, 2, 3, 4, 5, 6, 7, 8, 9]`

谢谢。

def transform_row(row):
    if row["months"][2] == 12:
        new_list = row["months"][2:] + row["months"][:2]
    else:
        new_list = row["months"]
    return new_list


df["months"] = df.apply(transform_row, axis=1)

print(df)
``

【问题讨论】:

    标签: pandas indexing row


    【解决方案1】:

    您可以使用简单的列表理解:

    df['month'] = [l[l.index(12):] for l in df['month']]
    

    或者,如果 12 始终是第 3 项:

    df['month'] = [l[2:] for l in df['month']]
    

    输出:

           A            B                            month
    0  10712  99883522686  [12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    1  10714   9998240348  [12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    2  10715  99997364349  [12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    使用的输入:

    df = pd.DataFrame({'A': [10712, 10714, 10715],
                       'B': [99883522686, 9998240348, 99997364349],
                       'month': [[10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9],
                                 [10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9],
                                 [10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9]]})
    

    【讨论】:

      【解决方案2】:

      如果需要通过 12 测试第三个元素,然后过滤使用:

      m = df["months"].str[2].eq(12)
      
      df['months'] = df['months'].mask(m, df["months"].str[2:])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-14
        • 2020-04-07
        • 2013-12-16
        • 2015-03-02
        相关资源
        最近更新 更多