【问题标题】:Elementwise comparison of lists of different lengths不同长度列表的逐元素比较
【发布时间】:2023-01-13 00:01:44
【问题描述】:

我有以下数据框:

df=

   datetime            col1 col2
0  2023-01-01 12:00:00 100  200
1  2023-01-02 12:00:00 120  400
2  2023-01-03 12:00:00 140  500
3  2023-01-04 12:00:00 160  700
4  2023-01-05 12:00:00 200  300
5  2023-01-06 12:00:00 430  200
6  2023-01-07 12:00:00 890  100

我有以下列表:

dates = [2023-01-01, 2023-01-03, 2023-01-07]

我想创建一个新列并用与df['datetime'] 的日期部分相同的列表项填充它。

使用下面的代码,我可以将列表的元素与df['datetime'] 中的元素进行比较。

import numpy as np
np.isin(dates, pd.DatetimeIndex(df['datetime']).date)

我试图实现以下代码,但由于大小不同,它无法正常工作:

np.where(np.isin(dates, pd.DatetimeIndex(df['datetime']).date),df['col3']==1,df['col3']==0)

输出应如下所示:

df=

   datetime            col1 col2 col3
0  2023-01-01 12:00:00 100  200  1
1  2023-01-02 12:00:00 120  400  0
2  2023-01-03 12:00:00 140  500  1
3  2023-01-04 12:00:00 160  700  0
4  2023-01-05 12:00:00 200  300  0
5  2023-01-06 12:00:00 430  200  0
6  2023-01-07 12:00:00 890  100  1

【问题讨论】:

    标签: python pandas dataframe numpy


    【解决方案1】:

    您可以使用 lambda 函数:

    df['col3'] = df['datetime'].apply(lambda x: 1 if x in dates else 0)
    

    并得到

       datetime            col1 col2 col3
    0  2023-01-01 12:00:00 100  200  1
    1  2023-01-02 12:00:00 120  400  0
    2  2023-01-03 12:00:00 140  500  1
    3  2023-01-04 12:00:00 160  700  0
    4  2023-01-05 12:00:00 200  300  0
    5  2023-01-06 12:00:00 430  200  0
    6  2023-01-07 12:00:00 890  100  1
    

    【讨论】:

      猜你喜欢
      • 2021-03-18
      • 1970-01-01
      • 2021-02-25
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多