Python 如何根据列值而不是索引来pd.concat数据帧?
我有一个元数据的数据帧,表示为Python 如何根据列值而不是索引来pd.concat数据帧?,python,pandas,dataframe,concatenation,Python,Pandas,Dataframe,Concatenation,我有一个元数据的数据帧,表示为DF_0,然后是一个实际数据的数据帧(DF_1)。我想在我的数据帧上使用pd.concat,但不涉及索引。DF_0的索引是任意的,DF_1的索引对应于DF_0的attr_1中的值 我能想到的唯一方法是: (1) 使attr_1成为我的索引,然后合并,这是我不愿意做的;或 (2) 排序然后合并[但缺少数据可能会把事情搞砸]。我觉得熊猫已经想到了这一点 有人知道如何使用pd.concat或类似的[我的真实数据有字符串、浮点、整数]沿特定数据帧中特定列的值表示的“轴”合并
DF_0
,然后是一个实际数据的数据帧(DF_1
)。我想在我的数据帧上使用pd.concat
,但不涉及索引。DF_0
的索引是任意的,DF_1
的索引对应于DF_0
的attr_1
中的值
我能想到的唯一方法是:
(1) 使attr_1
成为我的索引,然后合并,这是我不愿意做的;或
(2) 排序然后合并[但缺少数据可能会把事情搞砸]。我觉得熊猫已经想到了这一点
有人知道如何使用pd.concat
或类似的[我的真实数据有字符串、浮点、整数]沿特定数据帧中特定列的值表示的“轴”合并2[或更多?]个数据帧吗?
这些值可能是有序的,也可能不是有序的。我上面描述的方法是唯一的方法吗?它们看起来很乱
DF_0 = pd.DataFrame(np.arange(15).reshape(5,3),
columns=["attr_%d"%j for j in range(3)])
# attr_0 attr_1 attr_2
# 0 0 1 2
# 1 3 4 5
# 2 6 7 8
# 3 9 10 11
# 4 12 13 14
DF_1 = pd.DataFrame([[0,1,0,1,1],[0,0,0,1,0],[1,1,1,0,1]],
index = ["other_%d"%j for j in range(3)],
columns = [1,4,7,10,13]).T
# other_0 other_1 other_2
# 1 0 0 1
# 4 1 0 1
# 7 0 0 1
# 10 1 1 0
# 13 1 0 1
# What I want
DF_X = pd.DataFrame(
np.concatenate([DF_0.as_matrix(), DF_1.as_matrix()], axis=1),
columns=list(DF_0.columns) + list(DF_1.columns))
# attr_0 attr_1 attr_2 other_0 other_1 other_2
# 0 0 1 2 0 0 1
# 1 3 4 5 1 0 1
# 2 6 7 8 0 0 1
# 3 9 10 11 1 1 0
# 4 12 13 14 1 0 1
您正在查找方法的
axis=1
参数
通过不同类型的连接/合并/连接示例,这是一个很好的解释
演示:
您正在查找方法的
axis=1
参数
通过不同类型的连接/合并/连接示例,这是一个很好的解释
演示:
您想沿着
DF_0
的attr_1
列和DF_1
的索引合并:
DF_X = pd.merge(DF_0, DF_1, left_on='attr_1', right_index=True)
print(DF_X)
输出:
attr_0 attr_1 attr_2 other_0 other_1 other_2
0 0 1 2 0 0 1
1 3 4 5 1 0 1
2 6 7 8 0 0 1
3 9 10 11 1 1 0
4 12 13 14 1 0 1
您想沿着
DF_0
的attr_1
列和DF_1
的索引合并:
DF_X = pd.merge(DF_0, DF_1, left_on='attr_1', right_index=True)
print(DF_X)
输出:
attr_0 attr_1 attr_2 other_0 other_1 other_2
0 0 1 2 0 0 1
1 3 4 5 1 0 1
2 6 7 8 0 0 1
3 9 10 11 1 1 0
4 12 13 14 1 0 1
你的问题不在于pd.concat,而在于理解你想要什么。您可以通过思考最终结果应该是什么样来澄清这一点,因为您已经展示了
DF_0
和DF_1
如果attr_1
与DF_1
s索引相同,则:
pd.concat([DF_0.set_index('attr_1', drop=False), DF_1], axis=1)
你的问题不在于你是否理解你想要的东西。您可以通过思考最终结果应该是什么样来澄清这一点,因为您已经展示了
DF_0
和DF_1
如果attr_1
与DF_1
s索引相同,则:
pd.concat([DF_0.set_index('attr_1', drop=False), DF_1], axis=1)
试试这个:
pd.concat([…],axis=1)
显示有一个axis
参数来做这个试试这个:pd.concat([…],axis=1)
显示有一个axis
参数来做这个,他们需要有相同的索引,对吗?@O.rka,是的-所有DFs都将通过索引合并他们需要具有相同的索引,对吗?@O.rka,是的-所有DFs都将通过索引合并这正是我想要的!那正是我要找的!谢谢你的回答。这也是一个很好的方法,但我想看看是否有一种不合并索引的方法。谢谢你的回答。这也是一个很好的方法,但我试着看看是否有一种不合并索引的方法。