Python 如何在一段时间内组合具有不同(但有时重叠)索引的数据帧?
这是我生命的延续。假设我有一些随机排列的数据帧(下面,我将模拟这些数据帧) 正如上面代码中所解释的,我想从Python 如何在一段时间内组合具有不同(但有时重叠)索引的数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,这是我生命的延续。假设我有一些随机排列的数据帧(下面,我将模拟这些数据帧) 正如上面代码中所解释的,我想从df1、df2、df3和df4中构建desired\u final\u df。目前我能做的最好的事情是: df12 = pd.concat([df1,df2],axis=1, sort=True) df34 = pd.concat([df3,df4],axis=1, sort=True) desired_final_df = pd.concat([df12,df34],axis=0, sor
df1
、df2
、df3
和df4
中构建desired\u final\u df
。目前我能做的最好的事情是:
df12 = pd.concat([df1,df2],axis=1, sort=True)
df34 = pd.concat([df3,df4],axis=1, sort=True)
desired_final_df = pd.concat([df12,df34],axis=0, sort=False)
但这种方法需要我知道沿着轴=1和轴=0追加哪个有没有一种更像熊猫的方法,可以用上面提到的较小数据块构建整合的数据框架?我的想法大致如下:
所需的\u final\u df=pd.DataFrame()
对于数据文件中的f:#我们可以替换[df1、df2、df3、df4]进行演示
cur\u df=pd.read\u excel(f,index\u col=0)
如果有(设置(当前方向索引)和设置(最终方向索引)):
final_df=pd.concat([final_df,cur_df],axis=1,sort=False)
其他:
final_df=final_df.append(cur_df)
显然,上面的代码正在生成所需的\u final\u df
非常感谢您的任何提示/建议。谢谢大家!
concat
+groupby
onaxis=1
l=[df1,df2,df3,df4]
m=pd.concat(l,axis=1,sort=False)
m.groupby(m.columns,axis=1).first().fillna('') #ideally don't use the fillna
你为什么认为熊猫不像熊猫呢?@QuangHoang,可能是个误会。我没有说pd。concat不象熊猫。我的意思是,如果有一种方法可以动态地整合不同时间段和索引的任何传入数据帧,这就是我要寻找的。谢谢你的建议。也许我的问题有点困惑。如果我们可以将传入的数据帧收集到一个类似于
l
的列表中,那么您的方法就会起作用。如果数据帧像cur_df[df1,df2,df3,df4]:中的那样单独进来会怎么样?另外,请您进一步解释一下为什么建议不要使用fillna
(性能原因?)。非常感谢。没有关系!我忘记了groupby
不会通过调用来更改m
,我必须将其重新分配给m=m.groupby(…)
。现在我明白了。:)但请告诉我您为什么不鼓励使用fillna
。谢谢大家!@user1330974因为它不允许您执行涉及na的其他操作,isna()
,notna()
,例如,它要求您执行类似于df=''
,任何涉及字符串操作的操作都很慢,因此我不建议,但取决于您的要求,如果数据帧进入循环,您可以将所有内容保存在一个列表中:l=[]
对于数据帧列表中的i():l.append(i)
非常感谢!这解释了为什么运行fillna
不是最佳选择:
l=[df1,df2,df3,df4]
m=pd.concat(l,axis=1,sort=False)
m.groupby(m.columns,axis=1).first().fillna('') #ideally don't use the fillna
2016-01 2016-02 2016-03 2016-04 2017-01 2017-02 2017-03 2017-04
N1 A1 B1 C1 D1 A1 B1 C1 D1
N2 A2 B2 C2 D2 A2 B2 C2 D2
N3 A3 B3 C3 D3 A3 B3 C3 D3
N4 A4 B4 C4 D4
N5 A5 B5 C5 D5
N6 A6 B6 C6 D6 A6 B6 C6 D6
N7 A7 B7 C7 D7 A7 B7 C7 D7
N8 A8 B8 C8 D8
N9 A9 B9 C9 D9 A9 B9 C9 D9
N10 A10 B10 C10 D10