python - 如何进行数学运算{例如。diff()} 在 DataFrame 的多个列中,并将结果作为新列保存在同一个 DataFrame 中
问题描述
假设我有一个这样的数据框:
df=
p1 v1 p2 v2 p3 v3 p4 v4 p5 v5 p6 v6
0 3 6 5 8 4 4 8 4 9 6 0 0
1 5 0 5 9 0 8 8 5 5 2 2 9
2 6 9 8 6 9 9 9 2 8 4 2 6
3 4 1 8 0 5 9 0 2 1 2 4 8
4 1 4 8 1 3 1 4 9 6 2 6 7
5 5 4 6 5 5 2 3 0 5 5 6 4
6 4 4 9 0 2 1 7 0 1 0 8 8
7 9 1 7 3 5 4 4 4 8 9 3 8
8 1 5 0 5 4 3 6 5 2 3 1 4
9 9 1 7 6 5 3 6 8 8 4 7 5
10 1 6 5 8 2 5 1 5 3 4 5 8
11 8 7 6 6 9 3 5 5 9 7 6 7
p和v是针对不同样品(例如 1、2、3..等)测量的某些参数。现在我想将“p_”的所有列乘以一个数字,并在“v_”diff()
的所有列上使用以减去该列的后续行。
我想使用相应的样本名称和数学运算的第一个字母将结果保存在同一个 DataFrame 中,例如Dv1,Dv2用于输出df. diff('v1'), df.diff('v2')
等。类似地,对于p的列,它就像Mp1。
手动为每一列,我可以进行操作并保存结果,但这很乏味(因为样本数量非常多),所以我想使用 for 循环之类的条件来自动化它。
任何建议在 pandas 的 DataFrame 的多列中进行数学运算(减法、乘法或除法),并使用列名和数学运算名称的组合将结果作为新列保存在同一 DataFrame 中。
新的 DataFrame 应该如下所示p1 Mp1 v1 DV1 p2 Mp2 v2 Dv2 p3 Mp3 v3 Dv3.......
。
解决方案
试试这个:
# Find all columns that starts with p and followed by a number
p = df.columns[df.columns.str.match('p\d')]
# Find all columns that starts with v and followed by a number
v = df.columns[df.columns.str.match('v\d')]
# Multiply the p columns by 2
mp = df[p].mul(2).add_prefix('M')
# Take a diff of the v columns
dv = df[v].diff().add_prefix('D')
# The display order of the columns
cols = [f'{j}{i}' for i in range(1,7) for j in ['p', 'Mp', 'v', 'Dv']]
# The final result
final = pd.concat([df, mp, dv], axis=1)[cols]
推荐阅读
- gcc - 包含文件
包括在内,gcc 似乎忽略了它 - loops - 如何使用嵌套在 for 循环中的 While 循环在 R 中创建向量?
- php - 使用 PHP 对数组中的匹配对进行分组
- json - 使用 jq,是否可以返回相同的 json 对象,但只能在多个级别上使用选定的字段/键?
- r - 在 data.table 连接中选择我从哪一列接收结果 - R
- python - 如何根据单个列上的多个条件获取 ID 计数?
- php - 为什么 php 代码不过滤 MySQL 数据库中的现有记录
- java - 使用 ContentCachingResponseWrapper 模拟测试过滤器
- prometheus - 在普罗米修斯中查找重复标签
- reactjs - 如何键入一个将返回 AxiosResponse 的函数作为其参数之一的通用组件?