首页 > 解决方案 > 从具有列表值的 pandas 数据帧创建稀疏数据帧

问题描述

我有一个包含 ID、日期和付款的 pandas 数据框,如下所示。日期以月为单位记录,并对应行中同一指数的付款。

ID          Dates                                  payments 
A    ['02-2010','05-2010']                        [45,50]
B    ['02-2010','04-2010','06-2010']              [42,48,52]
C    ['03-2010','04-2010','05-2010','06-2010']    [39,38,39,42]

我想以此创建一个稀疏的 Dataframe,以 ID 和 Date 作为我的维度,当当月没有付款时,用 0 填充单元格。结果应该是这样的。

    '02-2010' '03-2010' '04-2010' '05-2010' '06-2010'
A      45         0        0         50        0
B      42         0        48        0         52
C      0          39       38        39        42

标签: pythonpandasdataframe

解决方案


尝试:


# transform dates, payments to python list

#from ast import literal_eval

#df["Dates"] = df["Dates"].apply(literal_eval)
#df["payments"] = df["payments"].apply(literal_eval)



df = df.explode(["Dates", "payments"])
print(df.pivot(index="ID", columns="Dates", values="payments").fillna(0))

印刷:

Dates  02-2010  03-2010  04-2010  05-2010  06-2010
ID                                                
A           45        0        0       50        0
B           42        0       48        0       52
C            0       39       38       39       42

推荐阅读