- 此问题在此处已有答案**:
Pandas Merging 101(8个答案)
2天前关闭。
我有一些食品杂货的以下日期和价格数据,其中一些商品缺少某些月份的记录。例如,面包有2022年所有月份的数据,但果汁等商品缺少值。例如:
- 面包_ Dataframe **
| 日期|价格|
| - ------|- ------|
| 2022年1月1日|四、二|
| 2022年2月1日|4.0版|
| 2022年3月1日|四、一|
| 2022年4月1日|三、一|
| 2022年5月1日|二、一|
| ...|...|
- 果汁_ Dataframe **
| 日期|价格|
| - ------|- ------|
| 2022年1月1日|三、二|
| 2022年4月1日|四、一|
| 2022年5月1日|五、一|
| ...|...|
等等。
我的目标是创建一个带有日期索引和表示每个项目的列的单个 Dataframe ,NaN显示任何没有价格的月份/价格项目。
| 日期|面包|果汁|...|
| - ------|- ------|- ------|- ------|
| 2022年1月1日|四、二|三、二||
| 2022年2月1日|4.0版|钠氮||
| 2022年3月1日|四、一|钠氮||
| 2022年4月1日|三、二|四、一||
| 2022年5月1日|二、一|五、一||
到目前为止,我已经尝试创建items_dict[item_name] = pd.DataFrame({'Date': dates, 'Price': item_price})
的字典,然后使用pd.concat(items_dict, axis=1)
,但这只返回这种类型的 Dataframe 。
| 日期|("面包"、"价格")|("果汁"、"价格")|...|
| - ------|- ------|- ------|- ------|
| 2022年1月1日||||
| 2022年2月1日||||
| 2022年3月1日||||
| 2022年4月1日||||
| 2022年5月1日||||
任何帮助都将不胜感激。
1条答案
按热度按时间hfsqlsce1#
在面包 Dataframe 和果汁 Dataframe 中,将date列转换为datetime对象。然后,在这两个 Dataframe 中,将date列作为索引。为了区分重复的列名,使用
pd.merge
函数合并date索引上的两个 Dataframe ,并设置suffixes参数。最后,使用pd.pivot
方法透视合并后的 Dataframe ,将date作为索引。项目名称作为列,价格作为值。下面是代码:
这将生成所需的单个 Dataframe ,其中包含日期索引和表示每个项目的列,对于我们没有价格的任何月份/价格项目,将显示NaN。
编辑:对于多个 Dataframe ,您可以只使用for循环来迭代 Dataframe 列表。