这里是2个熊猫数据帧,其中索引是字符串:
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], columns=list('AB'))
df.index = ['Tax1','Tax2','Tax1','Tax2']
df2 = pd.DataFrame([[0, 0], [1, 1]], columns=list('AB'))
df2.index = ['Tax3','Tax3']
给出df:
以及df2:
有没有一种简单的方法可以将df2的行插入df中?
无需将索引字符串移回数字并使用df.loc ['k']吗? 我最近去过的地方是append,它将df2的两行放在df的末尾,而不是我要查找的内容...
答案 0 :(得分:2)
您可以:
执行此操作的代码是:
wrk1 = pd.concat([df.iloc[0:2], df.iloc[2:4]], keys=(1, 2))
wrk2 = pd.concat([df2[0:1], df2[1:2]], keys=(1,2))
result = pd.concat([wrk1, wrk2]).sort_index().reset_index(level=0, drop=True)
要考虑的细节:生成的DataFrame包含非唯一 索引中的条目,所以也许您应该离开索引的顶层 (您的选择)。
让我们看看中间结果:
wrk1 - df 的前2行,索引== 1 ,后2行 索引== 2 :
A B
1 Tax1 1 2
Tax2 3 4
2 Tax1 5 6
Tax2 7 8
wrk2 - df2 中的第一行,索引== 1 ,第二行 索引== 2 :
A B
1 Tax3 0 0
2 Tax3 1 1
生成结果的一个选项是其“不完整”版本(不包含 reset_index ):
pd.concat([wrk1, wrk2]).sort_index()
它给出以下结果:
A B
1 Tax1 1 2
Tax2 3 4
Tax3 0 0
2 Tax1 5 6
Tax2 7 8
Tax3 1 1
这里您有 2个级别的索引:
因此,从顶层您可以看到特定行的“源” (第一或第二子集),并且每一行都有唯一索引。
第二个(完整)选项是:
pd.concat([wrk1, wrk2]).sort_index().reset_index(level=0, drop=True)
它给出了您想要的:
A B
Tax1 1 2
Tax2 3 4
Tax3 0 0
Tax1 5 6
Tax2 7 8
Tax3 1 1
(没有最高的多索引级别)。