Pandas公园的当量减少和增加?

9rnv2umw  于 2022-12-10  发布在  其他
关注(0)|答案(1)|浏览(94)

我有一个 Dataframe 在下面的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之和大于零,则impression的值为1,否则0的值为1。下面是我希望看到的结果:

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]))
vuktfyat

vuktfyat1#

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

如果要选择特定的列/日,可以使用pandas.DataFrame.filter

num_days = 2
l = list(range(1, num_days+1))
pat= "|".join([str(x) for x in l])

sub_df = df.filter(regex="Day_[{}]".format(pat))

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

相关问题