我有一个数据框架,它是一个人在前期和后期在服务上花费的净额,这是给我的。我们希望做一个分析,比较这些成员在前期和后期是否有不同的消费和访问量。
数据框看起来是这样的,但这个问题在整个数据中出现在几个地方,有时它是"前置"成员缺少的句号,有时是"post"。时期。
df=pd.DataFrame({'unique_member_id_key':[723543, 723543, 723548, 723548, 723550, 723552, 723552],'net_amount':[34.26,35.09,72.07,54.73,54.32,87.43,87.32],'total_visits':[4,2,8,1,3,5,4],'Period':["Pre","Post","Pre","Post","Pre","Pre","Post"]})
我想做的是在python中修复这个问题,这样pandas数据框架将填充缺失的"前置"或";Post"句点与为"total_visitors"添加零的成员的新行对应。和";net_amount"列,并添加"前置"或";Post"值(取决于是否缺少用于"前"的行)。句点值或"post";期值).
有没有一种方法可以系统地做到这一点,而不必找到每个缺少"前置"或";Post"周期和插入行单独为每次发生这种情况?
谢谢! !马克。
IIUC,您可以使用pivot_table
获得密集矩阵,然后使用stack
获得原始数据帧:
>>> (df.pivot_table(index='unique_member_id_key', columns='Period',
values=['net_amount', 'total_visits'], fill_value=0)
.stack().reset_index())
unique_member_id_key Period net_amount total_visits
0 723543 Post 35.09 2
1 723543 Pre 34.26 4
2 723548 Post 54.73 1
3 723548 Pre 72.07 8
4 723550 Post 0.00 0 # <- HERE
5 723550 Pre 54.32 3
6 723552 Post 87.32 4
7 723552 Pre 87.43 5
或者@mozway用set_index/unstack
然后stack/reset_index
建议:
>>> (df.set_index(['unique_member_id_key', 'Period'])
.unstack(fill_value=0)
.stack().reset_index())
unique_member_id_key Period net_amount total_visits
0 723543 Post 35.09 2
1 723543 Pre 34.26 4
2 723548 Post 54.73 1
3 723548 Pre 72.07 8
4 723550 Post 0.00 0 # <- HERE
5 723550 Pre 54.32 3
6 723552 Post 87.32 4
7 723552 Pre 87.43 5