我有以下格式的数据框
df = pd.DataFrame(
{"company":["McDonalds","Arbys","Wendys"],
"City":["Dallas","Austin","Chicago"],
"Datetime":[{"11/23/2016":"1","09/06/2011":"2"},
{"02/23/2012":"1","04/06/2013":"2"},
{"10/23/2017":"1","05/06/2019":"2"}]})
df
>>> Company City Datetime
>>> McDonalds Dallas {'11/23/2016': '1', '09/06/2011':'2'}
>>> Arbys Austin {'02/23/2012': '1', '04/06/2013':'2'}
>>> Wendys Chicago {'10/23/2017': '1', '05/06/2019':'2'}
“Datetime”列中的字典是一个字符串,因此我必须使用 ast.literal_eval 将其读入 python 字典
我想根据日期时间中的值取消堆叠数据帧,以便输出如下所示:
df_out
>>> Company City Date Value
>>> McDonalds Dallas 11/23/2016 1
>>> McDonalds Dallas 09/06/2011 2
>>> Arbys Austin 02/23/2012 1
>>> Arbys Austin 04/06/2013 2
>>> Wendys Chicago 10/23/2017 1
>>> Wendys Chicago 05/06/2019 2
我对这个有点迷失,我知道我需要迭代行并读取每个字典,所以我想到使用 df.iterrows() 并创建命名元组每行值不会改变,然后循环字典本身附加不同的日期时间值,但我不确定这是最有效的方法。任何提示将不胜感激。
最佳答案
我的尝试:
(df.drop('Datetime', axis=1)
.merge(df.Datetime.agg(lambda x: pd.Series(x))
.stack().reset_index(-1),
left_index=True,
right_index=True
)
.rename(columns={'level_1':'Date', 0:'Value'})
)
输出:
company City Date Value
0 McDonalds Dallas 11/23/2016 1
0 McDonalds Dallas 09/06/2011 2
1 Arbys Austin 02/23/2012 1
1 Arbys Austin 04/06/2013 2
2 Wendys Chicago 10/23/2017 1
2 Wendys Chicago 05/06/2019 2
关于python - 如何在 pandas 数据框中取消堆叠字典列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219783/