Skip to main content
 首页 » 编程设计

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

2025年05月04日21Renyi-Fan

我的数据框是这样的

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