gpt4 book ai didi

python - 合并两个数据框并添加具有名称的列级别

转载 作者:行者123 更新时间:2023-12-04 04:01:50 25 4
gpt4 key购买 nike

嗨,我一直在研究 Pandas 的concat,join和merge方法,但似乎找不到我想要的东西。

假设我有两个数据框

A = pd.DataFrame("A",index=[0,1,2,3,4],columns=['Col 1','Col 2','Col 3'])
B = pd.DataFrame("B",index=[0,1,2,3,4],columns=['Col 1','Col 2','Col 3'])
>>> A
Col 1 Col 2 Col 3
0 A A A
1 A A A
2 A A A
3 A A A
4 A A A
>>> B
Col 1 Col 2 Col 3
0 B B B
1 B B B
2 B B B
3 B B B
4 B B B

现在,我想用合并的列创建一个新的数据框,我认为这最容易解释我是否要对列进行多索引
index = pd.MultiIndex.from_product([A.columns.values,['A','B']])
>>> index
MultiIndex(levels=[['Col 1', 'Col 2', 'Col 3'], ['A', 'B']],
labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]])

现在,如果我使用此列的多索引创建一个空的数据框
empty_df = pd.DataFrame('-',index=A.index,columns=index)
>>> empty_df
Col 1 Col 2 Col 3
A B A B A B
0 - - - - - -
1 - - - - - -
2 - - - - - -
3 - - - - - -
4 - - - - - -

我的问题是,我要使用哪种合并,合并或联接来获取这些内容?我已经尝试了多种用于concat ...内部,外部等的东西。我似乎找不到我想要的东西。我唯一能想到的就是制作空的数据框,然后回填。

编辑:尝试了Jezrael的回应后,它很接近但不完全是。我想要的是什么样的嵌套列?例如
empty_df['Col 1']
>>> empty_df['Col 1']
A B
0 - -
1 - -
2 - -
3 - -
4 - -

或者
>>> empty_df['Col 1']['A']
0 -
1 -
2 -
3 -
4 -
Name: A, dtype: object

所以这是我想出的一个解决方案,但是它是通过在列上进行迭代来实现的。
row_idx = A.index.union(B.index)
col_idx = pd.MultiIndex.from_product([A.columns.values,['A','B']])
new_df = pd.DataFrame('-',index=row_idx,columns=col_idx)
for column in A.columns:
new_df.loc[:,(column,'A')] = A[column]
new_df.loc[:,(column,'B')] = B[column]
>>> new_df
Col 1 Col 2 Col 3
A B A B A B
0 A B A B A B
1 A B A B A B
2 A B A B A B
3 A B A B A B
4 A B A B A B
>>> new_df['Col 1']
A B
0 A B
1 A B
2 A B
3 A B
4 A B
>>> new_df['Col 1']['A']
0 A
1 A
2 A
3 A
4 A
Name: A, dtype: object

最佳答案

我认为您需要带concat参数和keys axis=1 ,按 DataFrame.swaplevel 的级别的最后更改顺序,按 DataFrame.sort_index 的第一个级别排序:

df1 = (pd.concat([A, B], axis=1, keys=('A','B'))
.swaplevel(0,1, axis=1)
.sort_index(axis=1, level=0))
print (df1)
Col 1 Col 2 Col 3
A B A B A B
0 A B A B A B
1 A B A B A B
2 A B A B A B
3 A B A B A B
4 A B A B A B

要使用 MultiIndex 可以使用 DataFrame.xs :
print (df1.xs('Col 1', axis=1, level=0))
A B
0 A B
1 A B
2 A B
3 A B
4 A B

如果要选择 MultiIndex column,请使用 tuple:
print (df1[('Col 1', 'A')])
0 A
1 A
2 A
3 A
4 A
Name: (Col 1, A), dtype: object

如果要按索引和按列选择,请使用 loc:
print (df1.loc[4, ('Col 1', 'A')])
A

关于python - 合并两个数据框并添加具有名称的列级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58802654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com