我有一个看起来像这样的df
COL1 COL2 COL3
0 ABC N [{u'PERF_PCT': 0.2,u'PERF_DATE': 12},{u'PERF_PCT': 0.3,u'PERF_DATE': 13}]
1 XYZ N [{u'PERF_PCT': 0.6,u'PERF_DATE': 12},{u'PERF_PCT': 0.2,u'PERF_DATE': 13},{u'PERF_PCT': 0.7,u'PERF_DATE': 14}]
我需要解压缩第3列,以便数据框为COL3列表中的每个字典添加额外的行,并为dict中的每个键添加其他列。 dict中的键值对是固定的。
COL1 COL2 PERF_PCT PERF_DATE
0 ABC N 0.2 12
1 ABC N 0.3 13
2 XYZ N 0.6 12
3 XYZ N 0.2 13
4 XYZ N 0.7 14
我已经能够使用for循环完成相同的操作,但我需要一些非常高效的东西。得到的df可以有大约170k的记录,目前使用for循环需要大约20多秒,这是不可接受的。我希望使用pandas特定应用或其他功能可以使这更快,但无法这样做。如果有一个非常快速的方法来做到这一点,我将非常感激。感谢。
答案 0 :(得分:3)
试试这个:)
Idx=df.set_index(['COL1','COL2']).COL3.apply(pd.Series).stack().index
pd.DataFrame(df.set_index(['COL1','COL2']).COL3.apply(pd.Series).stack().values.tolist(),index=Idx).reset_index().drop('level_2',1)
Out[318]:
COL1 COL2 PERF_DATE PERF_PCT
0 ABC N 12 0.2
1 ABC N 13 0.3
2 XYZ N 12 0.6
3 XYZ N 13 0.2
4 XYZ N 14 0.7
数据输入
df = pd.DataFrame({'COL1':['ABC','XYZ'],
'COL2': ['N','N'],
'COL3' :[[{u'PERF_PCT': 0.2,u'PERF_DATE': 12},{u'PERF_PCT': 0.3,u'PERF_DATE': 13}],[{u'PERF_PCT': 0.6,u'PERF_DATE': 12},{u'PERF_PCT': 0.2,u'PERF_DATE': 13},{u'PERF_PCT': 0.7,u'PERF_DATE': 14}]] })