如何使用 pandas.concat 复制 pandas.Series 的 DataFrame.append?

How to replicate DataFrame.append of pandas.Series by using pandas.concat?

我有一个代码,我在其中创建了一个数据透视表 table,我对每一列应用了一个函数,并将结果作为一行附加到数据框。代码的行为如下:

>>> import pandas as pd
>>> df = pd.DataFrame({
... 'id':['A','B','C','A','B','C'],
... 'par':['x','x','x','y','y','y'],
... 'val':[1,2,3,4,5,6]})
>>> pv = df.pivot_table(index="id", columns='par', values="val", aggfunc="sum")
>>> avg = pv.mean().rename('MyFunc')
>>> pv.append(avg)
par       x    y
id
A       1.0  4.0
B       2.0  5.0
C       3.0  6.0
MyFunc  2.0  5.0

这是我期望的输出。但是,pandas.DataFrame.append 的文档说:

Deprecated since version 1.4.0: Use concat() instead. For further details see Deprecated DataFrame.append and Series.append

当我尝试用 pandas.concat 复制它时,我得到了不同的输出

>>> pd.concat([pv, avg])
     x    y    0
A  1.0  4.0  NaN
B  2.0  5.0  NaN
C  3.0  6.0  NaN
x  NaN  NaN  2.0
y  NaN  NaN  5.0
>>> pd.concat([pv, avg], axis=1)
     x    y  MyFunc
A  1.0  4.0     NaN
B  2.0  5.0     NaN
C  3.0  6.0     NaN
x  NaN  NaN     2.0
y  NaN  NaN     5.0

是否可以使用concat实现与append相同的结果?

如果可以追加 Series 使用 DataFrame.loc:

pv.loc['MyFunc'] = pv.mean()
print (pv)
par       x    y
id              
A       1.0  4.0
B       2.0  5.0
C       3.0  6.0
MyFunc  2.0  5.0

concat with convert Series to one row DataFrame by Series.to_frame并转置:

print (avg.to_frame().T)
par       x    y
MyFunc  2.0  5.0

df = pd.concat([pv, avg.to_frame().T])
print (df)
par       x    y
A       1.0  4.0
B       2.0  5.0
C       3.0  6.0
MyFunc  2.0  5.0