Pandas的对齐运算

Pandas的对齐运算

1、算术运算和数据对齐

1、Series 的对齐运算

s1 = pd.Series(np.arange(4),index=['a','b','c','d'])
s2 = pd.Series(np.arange(5),index=['a','c','e','f','g'])

s1:
a    0
b    1
c    2
d    3
dtype: int32
 
s2:
a    0
c    1
e    2
f    3
g    4
dtype: int32
   
s1 + s2 
a    0.0
b    NaN
c    3.0
d    NaN
e    NaN
f    NaN
g    NaN
dtype: float64

2、DataFrame的对齐运算

# DataFrame
df1 = pd.DataFrame(np.arange(12).reshape(4,3),index = ['a','b','c','d'],columns= list('ABC'))
df2 = pd.DataFrame(np.arange(9).reshape(3,3),index= ['a','b','f'],columns= list('ABD'))

df1
	A	B	C
a	0	1	2
b	3	4	5
c	6	7	8
d	9	10	11

df2
	A	B	D
a	0	1	2
b	3	4	5
f	6	7	8

df1 + df2 
	A	B	C	D
a	0.0	2.0	NaN	NaN
b	6.0	8.0	NaN	NaN
c	NaN	NaN	NaN	NaN
d	NaN	NaN	NaN	NaN
f	NaN	NaN	NaN	NaN

2、使用填充值的算术方法

# Series
s1
a    0
b    1
c    2
d    3
dtype: int32
  
s2 
a    0
c    1
e    2
f    3
g    4
dtype: int32
   
s1+ s2
a    0.0
b    NaN
c    3.0
d    NaN
e    NaN
f    NaN
g    NaN
dtype: float64
   
s1.add(s2,fill_value= 0 )
a    0.0
b    1.0
c    3.0
d    3.0
e    2.0
f    3.0
g    4.0
dtype: float64
#DataFrame
df1.add(df2,fill_value= 0)
	A	B	C	D
a	0.0	2.0	2.0	2.0
b	6.0	8.0	5.0	5.0
c	6.0	7.0	8.0	NaN
d	9.0	10.0 11.0 NaN
f	6.0	7.0	NaN	8.0
1/df1
	A	B	C
a	inf		1.000000	0.500000
b	0.333333	0.250000	0.200000
c	0.166667	0.142857	0.125000
d	0.111111	0.100000	0.090909

df1.rdiv(1)  # 字母r开头  会翻转参数
	A	B	C
a	inf	1.000000	0.500000
b	0.333333	0.250000	0.200000
c	0.166667	0.142857	0.125000
d	0.111111	0.100000	0.090909
df1.reindex(columns=df2.columns,fill_value=9)
	A	B	D
a	0	1	9
b	3	4	9
c	6	7	9
d	9	10	9

3、DataFrame 和Series混合运算

arr = np.arange(12).reshape(3,4)
arr
Out:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

arr[0]
Out:
array([0, 1, 2, 3])

arr - arr[0]  # 一个数组减去第一行数据,每一行数据都会减,这就叫广播
Out:
array([[0, 0, 0, 0],
       [4, 4, 4, 4],
       [8, 8, 8, 8]])

df1
	A	B	C
a	0	1	2
b	3	4	5
c	6	7	8
d	9	10	11

s3 = df1.iloc[0]
s3
Out:
A    0
B    1
C    2
Name: a, dtype: int32
        
df1 - s3 # Series 的行索引匹配DataFrame 的列索引,这样就完成了广播,向下广播
# 竖方向走的叫行广播
Out:
	A	B	C
a	0	0	0
b	3	3	3
c	6	6	6
d	9	9	9

s4 = df1['A']
s4
Out:
a    0
b    3
c    6
d    9
Name: A, dtype: int32
        
df1.sub(s4,axis='index')  # 横方向走叫列广播
Out:
	A	B	C
a	0	1	2
b	0	1	2
c	0	1	2
d	0	1	2

算术方法表:

方法 描述
add,radd 加法(+)
sub,rsub 减法(-)
div,rdiv 除法(/)
floordiv,rfllordiv 整除(//)
mul,rmul 乘法(*)
pow,rpow 幂次方(**)
posted @   坤坤无敌  阅读(145)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示