当前位置: 首页 > news >正文

【python】利用python处理数据(stata等价命令)

1.一般运算
  • 加法
# gen x = y + z
df['x'] = df['y'] + df['z']
  • 减法
# gen x = y - 1
df['x'] = df['y'] - 1
  • 乘法
# gen var = x * y
df['var'] = df['x'] * df['y']
  • 除法
# gen x = z / y
df['x'] = df['z'] / df['y']
  • 取对数
# gen logx = log(x)
df['logx'] = np.log(df['x'])
  • 开根号
# gen z = sqrt(y)
df['z'] = np.sqrt(df['y'])
  • 取平方
# gen x2 = x^2
df['x2'] = df['x'] ** 2
  • y 列对 3 取模
# gen x = mod(y,3)
df['x'] = df['y'] % 3
  • 向上或向下取整
# gen x = floor(y)
df['x'] = np.floor(df['y'])# gen x = ceil(y)
df['x'] = np.ceil(df['y'])
2.对列进行处理
  • 生成新变量
# gen x = 1 if (r2 == 0 | r2 == 1)
condition = (df['r2'] == 0) | (df['r2'] == 1)
df.loc[condition, 'x'] = 1# gen childage = age if r2 == 2
df.loc[df['r2'] == 2 , 'childage' ] = df['age']
  • 删除变量(列)
# drop r7_1
df = df.drop(['r7_1'], axis = 1)
df = df.drop(['mx','x'],axis = 1)
3.对行进行处理
  • 删除行
## 有条件的
# drop if childage < 18 | childage > 30
condition = (df['childage'] < 18) | (df['childage'] > 30)
df = df.drop(df[condition].index)
df = df.drop(df[(df['childage'] < 18) | (df['childage'] > 30)].index, axis=0)   # 等价## 删除缺失值
df = df.dropna(subset= ['mx'])
  • 保留行
# keep if r2 <= 2
df = df[df['r2'] <= 2]
  • 替换行生成新变量类似
# replace hedu=2 if if childage < 18 | childage > 30
condition = (df['childage'] < 18) | (df['childage'] > 30)
df.loc[condition, 'hedu'] = 2# replace hedu=0 if hedu==.   // 把缺失值替换为0
df['hedu'] = df['hedu'].fillna(0)
4.分组计算
# bysort h1: egen mx=mean(x)
df['mx'] = df.groupby('h1')['x'].transform('mean')
df['mx'].value_counts()# bysort h1 : egen htype = total(x)
df['htype'] = df.groupby('h1')['x'].transform('sum')# bysort h1: egen htype=count(id)
df['htype'] = df.groupby('h1')['id'].transform('count')

常见 transform函数

  • sum:对每个分组计算总和
  • mean:对每个分组计算均值
  • count:对每个分组计算非空值的数量
  • size:对每个分组计算总行数(包括空值)
  • min:对每个分组计算最小值
  • max:对每个分组计算最大值
  • std:对每个分组计算标准差
  • var:对每个分组计算方差
  • first:返回每个分组的第一个值
  • last:返回每个分组的最后一个值
  • median:对每个分组计算中位数

还可以传递自定义的函数到 transform() 中,例如使用 lambda 表达式:

df['double_x'] = df.groupby('h1')['x'].transform(lambda x: x * 2)

http://www.mrgr.cn/news/35538.html

相关文章:

  • 解决Oracle DECODE函数字符串截断问题的深度剖析20241113
  • 安装仓库,ssh连接与nfs共享文件
  • 【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
  • SwiftUI开发教程系列 - 第十二章:本地化与多语言支持
  • FP独立站引流革命:GG斗篷技术解锁流量新策略
  • PICO+Unity MR空间网格
  • 运算符重载
  • spring-boot、spring-cloud、spring-cloud-alibaba的常用依赖的依赖声明及pom文件
  • HtmlCss 基础总结(基础好了才是最能打的)五
  • 【每天学个新注解】Day 5 Lombok注解简解(四)—@Cleanup
  • 代码随想录算法训练营第三十九天 | 198.打家劫舍 ,213.打家劫舍II,337.打家劫舍III
  • 使用数据泵(Data Pump)迁移Oracle数据库数据
  • 针对国产化--离线安装Nginx rpm包下载 ARM64(.aarch64.rpm) 版本下载
  • CSS样式的4种引入方法
  • 洛谷P2571.传送带
  • 【VUE3.0】动手做一套像素风的前端UI组件库---Message
  • RabbitMQ简介
  • 《操作系统 - 清华大学》1 -2:操作系统概述 —— 什么是操作系统
  • 【C++取经之路】红黑树封装set
  • 关于养育孩子的一点想法
  • MATLAB算法实战应用案例精讲-【数模应用】路径规划
  • C++核心编程和桌面应用开发 第六天(this指针 友元)
  • Vue3中使用Pinia(封装并统一导出)
  • C++_CH19_继承
  • Make breakpoint pending on future shared library load
  • 【初阶数据结构】排序——插入排序