我有以下dfs
a = {"A":[123],"B":[19],"C":[18],"J":[220],'name':['group_1']}
b = {"A":[123],"B":[80],"C":[10],"D":[3],'name':['group_2']}
df1 = pd.DataFrame(a)
df2 = pd.DataFrame(b)
当附加它们时,得到:
df = df1.append(df2).fillna(0).reset_index(drop=True)
A B C D J name
0 123 19 18 0.00 220.00 group_1
1 123 80 10 3.00 0.00 group_2
我想要这个:
group_1 group_2
A 123 123
B 19 80
C 18 10
D 0 3
J 220 0
我希望融化或透视表将做的伎俩,但结果不像预期的那样。示例:df.pivot_table(index=['A','B','C','D','J'], columns=['name'], aggfunc='count')
将不显示'name' (group_1/2)作为列。
你可以试试
df1.append(df2).fillna(0).reset_index(drop=True).set_index('name').T
Out[284]:
name group_1 group_2
A 123.0 123.0
B 19.0 80.0
C 18.0 10.0
J 220.0 0.0
D 0.0 3.0
我会做类似于@BENY,但使用pandas.concat
更通用一点,并在设置索引后填充值,以受益于类型向下转换为int:
pd.concat([df1, df2]).set_index('name').fillna(0, downcast='infer').T
输出:
name group_1 group_2
A 123 123
B 19 80
C 18 10
J 220 0
D 0 3