我试图检测事件发生时的第一个日期:在我的产品 A 数据框中(参见数据透视表),我在 2017 年 4 月 3 日第一次存储了 20 个项目。
所以我想创建一个新的变量 calle new_var_2017-04-03 来存储增量。另一方面,在第二天 2017-04-04 我不介意物品现在是 50 而不是 20,我只想存储第一个事件
它给了我几个错误,我想至少知道它背后的整个逻辑是否有意义,它是“pythonic”,还是我完全走错了路
raw_data = {'name': ['B','A','A','B'],'date' : pd.to_datetime(pd.Series(['2017-03-30','2017-03-31','2017-04-03','2017-04-04'])),
'age': [10,20,50,30]}
df1 = pd.DataFrame(raw_data, columns = ['date','name','age'])
table=pd.pivot_table(df1,index=['name'],columns=['date'],values=['age'],aggfunc='sum')
table
我将日期传递给列表
dates=df1['date'].values.tolist()
我想在我的列表“日期”中做一个向后循环,并在发生事件时创建一个变量。伪代码: i-1 我的意思是列表中 i 之前的项目
def my_fun(x,list):
for i in reversed(list):
if (x[i]-x[i-1])>0 :
x[new_var+i]=x[i]-x[i-1]
else:
x[new_var+i]=0
return x
print (df.apply(lambda x: my_fun(x,dates), axis=1))
期望的输出:
raw_data2 = {'new_var': ['new_var_2017-03-30','new_var_2017-03-31','new_var_2017-04-03','new_var_2017-04-04'],'result_a': [np.nan,20,np.nan,np.nan],'result_b': [10,np.nan,np.nan,np.nan]}
df2= pd.DataFrame(raw_data2, columns = ['new_var','result_a','result_b'])
df2.T
让我们试试这个:
df1['age'] = df1.groupby('name')['age'].transform(lambda x: (x==x.min())*x)
df1.pivot_table(index='name', columns='date', values='age').replace(0,np.nan)
date 2017-03-30 2017-03-31 2017-04-03 2017-04-04
name
A NaN 20.0 NaN NaN
B 10.0 NaN NaN NaN
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句