【发布时间】:2018-03-30 21:59:43
【问题描述】:
我有两个数据帧,都以时间戳为索引。我想保留合并的第一个数据框中的列的顺序。
例如:
#required packages
import pandas as pd
import numpy as np
# defining stuff
num_periods_1 = 11
num_periods_2 = 4
# create sample time series
dates1 = pd.date_range('1/1/2000 00:00:00', periods=num_periods_1, freq='10min')
dates2 = pd.date_range('1/1/2000 01:30:00', periods=num_periods_2, freq='10min')
column_names_1 = ['C', 'B', 'A']
column_names_2 = ['B', 'C', 'D']
df1 = pd.DataFrame(np.random.randn(num_periods_1, len(column_names_1)), index=dates1, columns=column_names_1)
df2 = pd.DataFrame(np.random.randn(num_periods_2, len(column_names_2)), index=dates2, columns=column_names_2)
df3 = df1.merge(df2, how='outer', left_index=True, right_index=True, suffixes=['_1', '_2'])
print("\nData Frame Three:\n", df3)
上面的代码生成了两个数据帧,第一个数据帧包含 C、B 和 A 列。第二个数据帧包含 B、C 和 D 列。当前输出具有以下顺序的列; C_1、B_1、A、B_2、C_2、D。我希望合并输出中的列是 C_1、C_2、B_1、B_2、A_1、D_2。列的顺序从第一个数据帧中保留,任何与第二个数据帧相似的数据都添加到相应数据旁边。
是否可以在合并中进行设置,或者我可以使用 sort_index 来执行此操作吗?
编辑:也许更好的方式来表述排序过程是称它为 uncollated。每列放在一起的地方等等。
【问题讨论】:
-
怕没有设置。根据什么标准进行排序?
-
好吧,我希望排序标准是 column_names_1 中列名的顺序。
-
那样的话,不是D先来吗?顺便说一句,为什么不直接按您想要的顺序索引列?
-
好吧,当你合并两个数据框时,它会变成一个接一个。 (即['C_1','B_1','A','B_2','C_2','D'])。我想重新排列它,以便每列与其对应部分“配对”(即['C_1','C_2','B_1','B_2','A','D'])。从技术上讲,我可以为这个示例代码这样编码,但我希望它更加自动化。
-
您对使用有序字典有何看法?
标签: python-3.x pandas sorting merge