如何使用 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
我有一个代码,我在其中创建了一个数据透视表 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