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都将通过索引合并这正是我想要的!那正是我要找的!谢谢你的回答。这也是一个很好的方法,但我想看看是否有一种不合并索引的方法。谢谢你的回答。这也是一个很好的方法,但我试着看看是否有一种不合并索引的方法。