Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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 如何“连接/关联”2个数据帧,以便左数据帧的每一行都“连接”到右数据帧的每一行_Python_Pandas - Fatal编程技术网

Python 如何“连接/关联”2个数据帧,以便左数据帧的每一行都“连接”到右数据帧的每一行

Python 如何“连接/关联”2个数据帧,以便左数据帧的每一行都“连接”到右数据帧的每一行,python,pandas,Python,Pandas,我已经浏览了关于“合并、加入、连接”的熊猫文档,但一无所获 leftdf = pd.DataFrame({'m': ['K1']}) rightdf = pd.DataFrame({'k': ['K0', 'K1', 'K1', 'K2'], 'lv': [1, 2, 3, 4], 's': ['a', 'b', 'c', 'd']}) frames = [leftdf, rightdf] pd.concat(frames, s

我已经浏览了关于“合并、加入、连接”的熊猫文档,但一无所获

leftdf = pd.DataFrame({'m': ['K1']})

rightdf = pd.DataFrame({'k': ['K0', 'K1', 'K1', 'K2'],
                'lv': [1, 2, 3, 4],
                's': ['a', 'b', 'c', 'd']})

frames = [leftdf, rightdf]
pd.concat(frames, sort=False, ignore_index=True)
结果是

    m   k   lv  s
0   K1  NaN NaN NaN
1   NaN K0  1.0 a
2   NaN K1  2.0 b
3   NaN K1  3.0 c
4   NaN K2  4.0 d
我所追求的是……的结果

    m   k   lv  s
0   K1  K0  1.0 a
1   K1  K1  2.0 b
2   K1  K1  3.0 c
3   K1  K2  4.0 d
所以请注意,另一个要求是不允许出现NAN。leftdf的行数始终比右侧少,因此当单个leftdf行“附加”到rightdf的每一行时,元素值将向前填充

此外,leftdf不能是一个系列,因为它将有多个列。为了简单起见,我在这里使用了1列df

没有通用的索引值或列名

原因是我正在提取相关的JSON片段,需要构建一个平面表。所有这些相关部分并不一定存在于每个JSON对象中。他们有时做,有时不做。我必须在某些片段存在时保存它们,并在遇到“其他”片段时以某种方式将它们“连接”到其他片段

我想知道是否必须将这些转换为numpy数组?这可以通过使用Ndarays修辞来实现。我将尽可能多地探索大熊猫。

加入菲儿的行列

或concat,但轴=1


非常感谢@YO和Ben_W。在Merge、join和concatenate文档中,只提到过一次,但是在Merge_ordered中,ffill是一个参数,页面上到处都是nan,所以我想知道,使用它作为一种方法可以达到什么样的外推过程,甚至更接近它的存在。我在ffill文档中看到一个简短的注释对象,其中填充了缺少的值。叹气
rightdf.join(leftdf).ffill()
    k  lv  s   m
0  K0   1  a  K1
1  K1   2  b  K1
2  K1   3  c  K1
3  K2   4  d  K1
pd.concat(frames, axis = 1).ffill()
    m   k  lv  s
0  K1  K0   1  a
1  K1  K1   2  b
2  K1  K1   3  c
3  K1  K2   4  d