我有一个 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]))
1条答案
按热度按时间vuktfyat1#
IIUC,您可以将
numpy.where
与pandas.DataFrame.sum
搭配使用。试试这个:
#输出:
如果要选择特定的列/日,可以使用
pandas.DataFrame.filter
: