Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在一段时间内组合具有不同(但有时重叠)索引的数据帧?_Python_Pandas_Dataframe - Fatal编程技术网

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
on
axis=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