pandas 如果特定ID在缺失列中的前或后期间不包含零,则添加一行[重复]

camsedfj  于 2023-04-04  发布在  其他
关注(0)|答案(1)|浏览(105)

此问题在此处已有答案

Adding values for missing data combinations in Pandas(4个答案)
6小时前关门了。
我有一个dataframe,这是一个人在前期和后期的服务花费的净金额给我。我们正在寻找做一个分析,比较如果这些成员有不同的花费和访问在前期相比,后期。
dataframe看起来像这样,但是这个问题在几个点的数据中出现,有时是成员缺少的“前”期,有时是“后”期。
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 dataframe将用一个新的行来填充缺失的“Pre”或“Post”周期,该成员在“total_visits”和“net_amount”列中放入零,并为周期列添加“Pre”或“Post”值(取决于它是否缺失“Pre”周期值或“Post”周期值的行)。
有没有一种方法可以系统地做到这一点,而不必找到每个ID是失踪的“前”或“后”期间,并插入行单独为每次发生这种情况?
谢谢!!Mark

lp0sw83n

lp0sw83n1#

IIUC,你可以使用pivot_table来得到稠密矩阵,然后使用stack来得到你的原始 Dataframe :

>>> (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

相关问题