pandas对齐运算的实现示例

目录
  • 1.算术运算和数据对齐
    • 1.1 Series
    • 1.2 DataFrame
  • 2.使用填充值的算术方法
    • 2.1 Series
    • 2.2 DataFrame
  • 3.DataFrame和Series混合运算
    • 3.1 按行广播
    • 3.2 按列广播

1.算术运算和数据对齐

import numpy as np
import pandas as pd

1.1 Series

a1 = pd.Series(np.arange(4),index=['a','b','c','d'])
a2 = pd.Series(np.arange(5),index=['a','r','c','u','k'])
print(a1)
print("="*20)
print(a2)

a    0
b    1
c    2
d    3
dtype: int32
====================
a    0
r    1
c    2
u    3
k    4
dtype: int32

有相同的索引值相加后结果变为浮点数,不相同则返回NAN值。

a1 + a2

a    0.0
b    NaN
c    4.0
d    NaN
k    NaN
r    NaN
u    NaN
dtype: float64

1.2 DataFrame

a3 = pd.DataFrame(np.arange(12).reshape(3,4),index=['a','b','c'],columns=['q','w','e','r'])
a4 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','u','c'],columns=['m','e','r'])
print(a3)
print("="*20)
print(a4)

q  w   e   r
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11
====================
   m  e  r
a  0  1  2
u  3  4  5
c  6  7  8

只有行和列索引都相同的才能运算,否则返回NAN值

a3 + a4

e   m     q   r     w
a 3.0   NaN NaN   5.0 NaN
b NaN   NaN NaN   NaN NaN
c 17.0  NaN NaN   19.0 NaN
u NaN   NaN NaN   NaN NaN

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

2.1 Series

a1 = pd.Series(np.arange(4),index=['a','b','c','d'])
a2 = pd.Series(np.arange(5),index=['a','r','c','u','k'])
print(a1)
print("="*20)
print(a2)
print("="*20)
print(a1 + a2)    #有相同的索引值相加后结果变为浮点数,不相同索引值相加则返回NAN

a    0
b    1
c    2
d    3
dtype: int32
====================
a    0
r    1
c    2
u    3
k    4
dtype: int32
====================
a    0.0
b    NaN
c    4.0
d    NaN
k    NaN
r    NaN
u    NaN
dtype: float64

使用填充值,不会返回NAN值,如果a1,a2的索引值相同则将对应的值作算术运算,如果不同则作为一行新的数据,形成一个新的Series索引

a1.add(a2,fill_value=0)  #a1+a2 忽略NAN影响

a    0.0
b    1.0
c    4.0
d    3.0
k    4.0
r    1.0
u    3.0
dtype: float64

2.2 DataFrame

a3 = pd.DataFrame(np.arange(12).reshape(3,4),index=['a','b','c'],columns=['q','w','e','r'])
a4 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','u','c'],columns=['m','e','r'])
print(a3)
print("="*20)
print(a4)
print("="*20)
print(a3 + a4)   #只有行索引和列索引都相同的才能运算,否则返回NAN

q  w   e   r
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11
====================
   m  e  r
a  0  1  2
u  3  4  5
c  6  7  8
====================
    e     m     q     r     w
a   3.0   NaN   NaN   5.0   NaN
b   NaN   NaN   NaN   NaN   NaN
c  17.0   NaN   NaN   19.0  NaN
u   NaN   NaN   NaN   NaN   NaN

只有当两个DataFrame索引独有的行和列独有的索引对应的值才返回NAN,例如下面的 b行m列返回NAN值,其索引值是由a3独有的b和a4独有的m组成的,行和列其中之一的索引值不是独有的,则返回对应DataFrame中的值,例如a行q列中的是a3,a4都有的,返回a3中 a行q列对应的值。

#使用填充值,
a3.add(a4,fill_value=0)  

e    m  q     r    w
a 3.0    0.0  0.0 5.0    1.0
b 6.0    NaN  4.0 7.0    5.0
c 17.0   6.0  8.0 19.0   9.0
u 4.0    3.0  NaN 5.0    NaN

r 开头字母表示会翻转参数

1/a3

q w e r
a inf 1.000000 0.500000 0.333333
b 0.250 0.200000 0.166667 0.142857
c 0.125 0.111111 0.100000 0.090909

a3.rdiv(1)   #翻转div(除法),结果等同 1/a3

q w e r
a inf 1.000000 0.500000 0.333333
b 0.250 0.200000 0.166667 0.142857
c 0.125 0.111111 0.100000 0.090909

reindex指定索引和缺失值

将a3的列索引替换为a4的列索引 ,如果索引名字不相同,则返回NAN(不改变原DataFrame索引)

a3.reindex(columns=a4.columns))

m e r
a NaN 2 3
b NaN 6 7
c NaN 10 11

#对NAN进行填充
a3.reindex(columns=a4.columns,fill_value=66)  #把所有的NAN替换为66(可指定任意值)

m e r
a 66 2 3
b 66 6 7
c 66 10 11

3.DataFrame和Series混合运算

3.1 按行广播

arr = np.arange(12).reshape(3,4)
arr

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

取出第一行

arr[0] #取出第一行

array([0, 1, 2, 3])

每一行都减去第一行(按行进行广播)

arr - arr[0] #每一行都减去第一行(按行进行广播)

array([[0, 0, 0, 0],
       [4, 4, 4, 4],
       [8, 8, 8, 8]])

a3 = pd.DataFrame(np.arange(12).reshape(3,4),index=['a','b','c'],columns=['q','w','e','r'])
a3

q w e r
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11

位置索引 iloc[m,n] 第一个参数m表示行,第二个参数n表示列

s1 = a3.iloc[0]   #取出第一行
s1

q    0
w    1
e    2
r    3
Name: a, dtype: int32

每一行都减去第一行(按行进行广播)

a3-s1    #每一行都减去第一行(按行进行广播)

q w e r
a 0 0 0 0
b 4 4 4 4
c 8 8 8 8

3.2 按列广播

取出q这一列

s2 = a3['q']  #取出q这一列
s2

a    0
b    4
c    8
Name: q, dtype: int32

默认是行axis=1,指定axis='index'或axis=0,按列进行广播(a3所有列分别减去第q列)

a3.sub(s2,axis='index')  #默认是行axis=1,指定axis='index'(或axis=0),按列进行广播(a3所有列分别减去第q列)

q w e r
a 0 1 2 3
b 0 1 2 3
c 0 1 2 3

a3.sub(s2,axis=0)  #默认是行axis=1,指定axis=0(或)axis='index',按列进行广播(a3所有列分别减去第q列)

q w e r
a 0 1 2 3
b 0 1 2 3
c 0 1 2 3

a3.sub(s2)  #默认情况 axis=1

a b c e q r w
a NaN NaN NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN NaN NaN

到此这篇关于pandas对齐运算的实现示例的文章就介绍到这了,更多相关pandas对齐运算内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 解决pandas展示数据输出时列名不能对齐的问题

    列名用了中文的缘故,设置pandas的参数即可, 代码如下: import pandas as pd #这两个参数的默认设置都是False pd.set_option('display.unicode.ambiguous_as_wide', True) pd.set_option('display.unicode.east_asian_width', True) 以上这篇解决pandas展示数据输出时列名不能对齐的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 对pandas的算术运算和数据对齐实例详解

    pandas可以对不同索引的对象进行算术运算,如果存在不同的索引对,结果的索引就是该索引对的并集. 一.算术运算 a.series的加法运算 s1 = Series([1,2,3],index=["a","b","c"]) s2 = Series([4,5,6],index=["a","c","e"]) print(s1+s2) ''' a 5.0 b NaN c 8.0 e NaN '

  • pandas对齐运算的实现示例

    目录 1.算术运算和数据对齐 1.1 Series 1.2 DataFrame 2.使用填充值的算术方法 2.1 Series 2.2 DataFrame 3.DataFrame和Series混合运算 3.1 按行广播 3.2 按列广播 1.算术运算和数据对齐 import numpy as np import pandas as pd 1.1 Series a1 = pd.Series(np.arange(4),index=['a','b','c','d']) a2 = pd.Series(n

  • Pandas实现聚合运算agg()的示例代码

    目录 前言 1. 创建DataFrame对象 2. 单列聚合 3. 多列聚合 4. 多种聚合运算 5. 多种聚合运算并更改列名 6. 不同的列运用不同的聚合函数 7. 使用自定义的聚合函数 8. 方便的descibe 前言 在数据分析中,分组聚合二者缺一不可.对数据聚合(求和.平均值等)通常是不可避免的.pd.agg()很方便进行聚合操作. 1. 创建DataFrame对象 import pandas as pd df1 = pd.DataFrame({'sex':list('FFMFMMF')

  • pandas实现数据可视化的示例代码

    目录 一.概述 1.1 plot函数参数 1.2 本文用到的数据源说明 二.折线图--kind='line' 三.柱状图--kind='bar' 3.1 各组数据(列)分开展示 3.2 各组(列)数据合并展示--stacked 3.3  横向柱状图--kind='barh' 四.直方图--kind='hist' 4.1 概述 4.2 自定义直方图横向区间数量 4.3 多子图展示多序列数据 4.4 一维数据密度图--kind='kde' 4.5 累积直方图--cumulative = True 五

  • pandas实现按照Series分组示例

    目录 1 按照一个Series进行分组 2 按照多个Series进行分组 3 分组和聚合采用不同的列或Series进行 本文用到的表格内容如下: 先来看一下数据情形 import pandas as pd life_df = pd.read_excel(r'C:\Users\admin\Desktop\生活用品表.xlsx') print(life_df) result:       分类  编号    名称 0     水果   0    苹果 1     水果   1    橙子 2   生

  • pandas实现数据合并的示例代码

    目录 一. concat--数据合并 1.1 概述 1.2 指定合并的轴方向--axis 1.3 指定合并轴另外一个轴标签是否合并--join 1.4 指定合并轴原标签是否需要变化--ignore_index 1.5 指定合并轴方向新的index,便于区分数据--keys 1.6 指定合并轴方向新的index 的含义名称,一般和keys一起使用,让合并后的数据更直观--names 1.7 指定合并时是否允许合并轴上有重复标签--verify_integrity 二. merge--数据连接 2.

  • 纯python进行矩阵的相乘运算的方法示例

    本文介绍了纯python进行矩阵的相乘运算的方法示例,分享给大家,具体如下: def matrixMultiply(A, B): # 获取A的行数和列数 A_row, A_col = shape(A) # 获取B的行数和列数 B_row, B_col = shape(B) # 不能运算情况的判断 if(A_col != B_row): raise ValueError # 最终的矩阵 result = [] # zip 解包后是转置后的元组,强转成list, 存入result中 BT = [li

  • pandas数据拼接的实现示例

    一 前言 pandas数据拼接有可能会用到,比如出现重复数据,需要合并两份数据的交集,并集就是个不错的选择,知识追寻者本着技多不压身的态度蛮学习了一下下: 二 数据拼接 在进行学习数据转换之前,先学习一些数拼接相关的知识 2.1 join()联结 有关merge操作知识追寻者这边不提及,有空可能后面会专门出一篇相关文章,因为其学习方式根SQL的表联结类似,不是几行能说清楚的知识点: join操作能将 2 个DataFrame 合并为一块,前提是DataFrame 之间的列没有重复: # -*-

  • pandas DataFrame运算的实现

    1 算术运算 add(other) 比如进行数学运算加上具体的一个数字 data['open'].add(1) 2018-02-27 24.53 2018-02-26 23.80 2018-02-23 23.88 2018-02-22 23.25 2018-02-14 22.49 sub(other) 2 逻辑运算 2.1 逻辑运算符号 例如筛选data["open"] > 23的日期数据 data["open"] > 23返回逻辑结果 data[&qu

  • Pandas DataFrame求差集的示例代码

    在Pandas中 求差集没有专门的函数.处理办法就是将两个DataFrame追加合并,然后去重. divident.append(hasThisYearDivident) noHasThisYearDivident = divident.drop_duplicates(subset='ts_code', keep=False, inplace=True, ignore_index=True) 具体函数用法: https://pandas.pydata.org/pandas-docs/stable

  • c++ 结构体内存对齐基本概念及示例

    基本概念: 各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数, 各成员变量在存放的时候根据在结构中出现的顺序依次申请空间 同时按照上面的对齐方式调整位置. 空缺的字节自动填充, 同时为了确保结构的大小为结构的字节边界数(即该结构中占用最大的空间的类型的字节数)的倍数,所以在为最后一个成员变量申请空间后 还会根据需要自动填充空缺的字节: 举例说明: #include <iostream> using namespace std; #pragma pack

随机推荐