【问题标题】:Pandas equivelt of pyspark reduce and add?Pandas 相当于 pyspark 减少和添加?
【发布时间】:2022-12-03 05:45:53
【问题描述】:

我在下面有一个数据框,其中 Day_1、Day_2、Day_3 是过去 3 天的展示次数。

df = pd.DataFrame({'Day_1': [2, 4, 8, 0],
                   'Day_2': [2, 0, 0, 0],
                   'Day_3': [1, 1, 0, 0],
                  index=['user1', 'user2', 'user3', 'user4'])
df
      Day_1 Day_2 Day_3 
user1   2    2      1   
user2   4    0      1   
user3   8    0      0   
user4   0    0      0   

现在,我需要检查用户在过去n 天是否有任何印象。例如,如果 num_days = 2,我需要添加一个新列,impression,如果 Day_1 和 Day_2 之和大于零,则该列为 1,否则为 0。这是我希望看到的:

      Day_1 Day_2 Day_3 impression
user1   2    2      1   1
user2   4    0      1   1
user3   8    0      0   1
user4   0    0      0   0

pyspark 中这是一个简单的过程,我使用这样的东西:

imp_cols = ['Day_'+str(i) for i in range(1, num_days+1)]
df = df.withColumn("impression",reduce(add, [F.col(x) for x in imp_cols]))

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    IIUC,你可以使用numpy.wherepandas.DataFrame.sum

    尝试这个 :

    df["impression"] = np.where(df.sum(axis=1).gt(0), 1, 0)
    

    # 输出 :

    print(df)
    ​
           Day_1  Day_2  Day_3  impression
    user1      2      2      1           1
    user2      4      0      1           1
    user3      8      0      0           1
    user4      0      0      0           0
    

    【讨论】:

      【解决方案2】:

      您可以使用 DataFrame.loc 方法选择要求和的列,然后使用 DataFrame.sum 方法计算这些列的总和。然后,您可以使用 DataFrame.clip 方法将小于 1 的值设置为 0,将大于或等于 1 的值设置为 1。最后,您可以使用 DataFrame.assign 方法将新的印象列添加到数据框中。

      import pandas as pd
      
      df = pd.DataFrame({'Day_1': [2, 4, 8, 0],
                         'Day_2': [2, 0, 0, 0],
                         'Day_3': [1, 1, 0, 0],
                        index=['user1', 'user2', 'user3', 'user4'])
      
      num_days = 2
      imp_cols = ['Day_'+str(i) for i in range(1, num_days+1)]
      
      df = df.loc[:, imp_cols].sum(axis=1).clip(0, 1).to_frame("impression")
      
      df = df.assign(impression=impression)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        • 2018-04-21
        • 2016-01-19
        • 2018-09-07
        • 2021-06-25
        • 2019-06-07
        相关资源
        最近更新 更多