python - Python Pandas:对每一行应用一个特定的函数
问题描述
我正在尝试对我拥有的数据应用一种标准化形式。我希望从数据框中的每个值中减去每一行的中位数。到目前为止我所拥有的:
# Generate sample data
data = { "sample_name": ["s1", "s2", "s3", "s4", "s5", "s6"],
"group_name": ["g1", "g1", "g1", "g2", "g2", "g2"],
'col1':[1, 22, 3, 45, 31, 53],
'col2':[30, 21, 10, 42, 56, 20],
'col3':[78, 25, 33, 87, 20, 19],
'col4':[11, 23, 14, 98, 55, 66],
'col5':[19, 29, 39, 49, 59, 69],
}
df = pd.DataFrame(data)
# calculate medians of each row
median_ls = list(df.median(axis=1))
# [19.0, 23.0, 14.0, 49.0, 55.0, 53.0]
预期结果是:
-18,11,59,-8,0
-1,-2,2,0,6
-11,-4,19,0,25
-4,-7,38,49,0
-24,1,-35,0,4
0,-33,-34,13,16
我看过df.apply(<function>, axis=1)
,但无法弄清楚如何在行之间迭代地应用特定于行的函数的语法。
解决方案
用于DataFrame.select_dtypes
获取数字列并通过DataFrame.sub
with减去axis=1
:
df1 = df.select_dtypes(np.number).sub(df.median(axis=1), axis=0)
print (df1)
col1 col2 col3 col4 col5
0 -18.0 11.0 59.0 -8.0 0.0
1 -1.0 -2.0 2.0 0.0 6.0
2 -11.0 -4.0 19.0 0.0 25.0
3 -4.0 -7.0 38.0 49.0 0.0
4 -24.0 1.0 -35.0 0.0 4.0
5 0.0 -33.0 -34.0 13.0 16.0
如果需要分配回输出使用:
cols = df.select_dtypes(np.number).columns
df[cols] = df[cols].sub(df.median(axis=1), axis=0)
print (df)
sample_name group_name col1 col2 col3 col4 col5
0 s1 g1 -18.0 11.0 59.0 -8.0 0.0
1 s2 g1 -1.0 -2.0 2.0 0.0 6.0
2 s3 g1 -11.0 -4.0 19.0 0.0 25.0
3 s4 g2 -4.0 -7.0 38.0 49.0 0.0
4 s5 g2 -24.0 1.0 -35.0 0.0 4.0
5 s6 g2 0.0 -33.0 -34.0 13.0 16.0
另一个想法是通过以下方式选择所有没有前 2 的行DataFrame.iloc
:
df.iloc[:, 2:] = df.iloc[:, 2:].sub(df.median(axis=1), axis=0)
print (df)
sample_name group_name col1 col2 col3 col4 col5
0 s1 g1 -18.0 11.0 59.0 -8.0 0.0
1 s2 g1 -1.0 -2.0 2.0 0.0 6.0
2 s3 g1 -11.0 -4.0 19.0 0.0 25.0
3 s4 g2 -4.0 -7.0 38.0 49.0 0.0
4 s5 g2 -24.0 1.0 -35.0 0.0 4.0
5 s6 g2 0.0 -33.0 -34.0 13.0 16.0
推荐阅读
- numpy - 在 for 循环中将 numpy 数组添加到 numpy 数组
- java - 以正确的方式从实时数据库中检索大量数据
- android - 将 IR 扫描码转换为图案
- file-upload - Chrome扩展截图上传503错误
- javascript - 使用 `Proxy` 对象或 getter/setter 在对象更改时中断/暂停 JavaScript (DevTools)
- python - 没有空格时如何用分号分隔 2 个完整名称(并排除以“Mc”开头的名称
- python - Python - 在字典中搜索
- python - 无法访问while循环
- java - 为 JWT 验证生成公钥实例
- javascript - JavaScript 类中的“this”为什么会抛出这个错误?