python - 将 lambda 应用于数据框,但仅限于特定的行数

标签 python pandas

我的数据框是这样的

a = {'A': {0: 40.1, 1: 40.1, 2: 40.1, 3: 45.45, 4: 41.6, 5: 39.6},
     'B': {0: 41.0, 1: 43.6, 2: 41.65, 3: 47.7, 4: 46.0, 5: 42.95},
     'C': {0: 826.0, 1: 835.0, 2: 815.0, 3: 169.5, 4: 170.0, 5: 165.5},
     'D': {0: 889.0, 1: 837.0, 2: 863.3, 3: 178.8, 4: 172.9, 5: 170.0}}

a = pd.DataFrame(a)

#a
       A      B      C      D
0  40.10  41.00  826.0  889.0
1  40.10  43.60  835.0  837.0
2  40.10  41.65  815.0  863.3
3  45.45  47.70  169.5  178.8
4  41.60  46.00  170.0  172.9
5  39.60  42.95  165.5  170.0

我想将 C 列和 D 列除以 5 但最多只能到第二个索引

this的帮助下我想到了

a.apply(lambda x: x/5 if 'C' in x.name or 'D' in x.name else x)

如您所想,它适用于整个列。

仅将其应用到第二个索引并保持它们原位的任何方式

最佳答案

默认索引使用loc选择:

a.loc[:2, ['C','D']] /= 5

详细信息:

print (a.loc[:2, ['C','D']])
       C      D
0  826.0  889.0
1  835.0  837.0
2  815.0  863.3

所有索引值(例如 DatetimeIndex)的通用解决方案使用 get_indexer按列名和 iloc 排列的位置选择:

a.iloc[:3, a.columns.get_indexer(['C','D'])] /= 5
print (a)
       A      B      C       D
0  40.10  41.00  165.2  177.80
1  40.10  43.60  167.0  167.40
2  40.10  41.65  163.0  172.66
3  45.45  47.70  169.5  178.80
4  41.60  46.00  170.0  172.90
5  39.60  42.95  165.5  170.00

详细信息:

print (a.iloc[:3, a.columns.get_indexer(['C','D'])])
       C      D
0  826.0  889.0
1  835.0  837.0
2  815.0  863.3

关于python - 将 lambda 应用于数据框,但仅限于特定的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50025786/

相关文章:

python - 函数后面的括号是什么意思

python - 无法使用装饰器覆盖类对象的 str 结果

python - 如何在 Pandas 中选择和存储大于数字的列?

python - numpy.ndarray 与 pandas.DataFrame

python - 使用 pandas DateTimeIndex 提取年份但出现错误

用于提取日期和时间的 Python 字符串解析

python - 在LinuxMint上安装python2.6

python - 心电信号滤波

python - Kmeans 肘部方法不返回肘部

python - 替换多个值并为多个数据帧创建新列的优雅方法