gpt4 book ai didi

python - 连接 Pandas 系列并将系列名称添加到多级索引

转载 作者:行者123 更新时间:2023-12-01 07:07:08 24 4
gpt4 key购买 nike

我有多个具有匹配多级索引的命名 Pandas 系列数据集

SeriesA = 

L1 L2 L3 value_a1
L2 L3 value_a2
L3 value_a3

SeriesA.name = First_Name


SeriesB =

L1 L2 L3 Value_b1
L2 L3 Value_b2
L3 Value_b3

SeriesB.name = Second_Name

我想要做的是将系列名称添加到现有系列索引中,然后再连接它们。预期输出应该是

SeriesAB =

L1 L2 L3 First_name value_a1
L2 L3 First_name value_a2
L3 First_name value_a3
L1 L2 L3 Second_name value_b1
L2 L3 Second_name value_b2
L3 Second_name value_b3

我尝试了 pd.join、pd.merge、pd.concat 的各种方法,但名称似乎是症结所在。

这样做的目的是在将名称值转入数据帧之前合并名称值,以便数据看起来像这样。我猜 unstack 将是解决这个问题的方法。

final_data =
First_name Second_name
L1 L2 L3 value_a1 value_b1
L2 L3 value_a2 value_b2
L3 value_a3 value_b3

我也想避免这个输出

Unwanted = 
First_Name Second_Name
L1 L2 L3 value_a1 NaN
L2 L3 value_a2 NaN
L3 value_a3 NaN
L1 L2 L3 NaN value_b1
L2 L3 NaN value_b2
L3 NaN value_b3

最佳答案

使用concatSeries.reorder_levelsSeries.unstack .

concat 之后的级别值有重复,因此解决方案有点复杂 - 需要 GroupBy.cumcount 的辅助级别:

df = (pd.concat([SeriesA, SeriesB], keys=('First_Name','Second_Name'))
.reorder_levels([1,2,3,0])
.to_frame('a'))
print (df)
a
L1 L2 L3 First_Name value_a1
First_Name value_a2
First_Name value_a3
Second_Name value_b1
Second_Name value_b2
Second_Name value_b3

df = (df.set_index(df.groupby(df.index).cumcount(), append=True)['a']
.unstack([3])
.reset_index(level=3, drop=True))
print (df)
First_Name Second_Name
L1 L2 L3 value_a1 value_b1
L3 value_a2 value_b2
L3 value_a3 value_b3

如果 concat 后不重复,解决方案会更简单:

print (SeriesA)
L1 L2 L3 value_a1
L2 L2 L3 value_a2
L3 L2 L3 value_a3
Name: a, dtype: object

print (SeriesB)
L1 L2 L3 value_b1
L2 L2 L3 value_b2
L3 L2 L3 value_b3
Name: a, dtype: object

df = (pd.concat([SeriesA, SeriesB], keys=('First_Name','Second_Name'))
.reorder_levels([1,2,3,0])
.unstack())
print (df)
First_Name Second_Name
L1 L2 L3 value_a1 value_b1
L2 L2 L3 value_a2 value_b2
L3 L2 L3 value_a3 value_b3

关于python - 连接 Pandas 系列并将系列名称添加到多级索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58390449/

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