如何仅对Pandas DataFrame指定行数应用Lambda函数执行列除法?
如何对Pandas DataFrame的特定行数应用Lambda函数处理C列?
我来帮你搞定这个需求,咱们先从确认你的DataFrame开始,先把数据加载好:
import pandas as pd 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}} df = pd.DataFrame(a)
接下来分几种场景给你解决方案,按需选用就行:
场景1:处理前N行(比如前3行)的C列
如果你想给前3行的C列做除法(比如除以100),用loc定位行和列,再结合apply+lambda就能实现:
# 对前3行的C列应用lambda执行除法 df.loc[df.index[:3], 'C'] = df.loc[df.index[:3], 'C'].apply(lambda x: x / 100)
执行后你的DataFrame会变成这样:
A B C D 0 40.10 41.00 8.26 889.0 1 40.10 43.60 8.35 837.0 2 40.10 41.65 8.15 863.3 3 45.45 47.70 169.50 178.8 4 41.60 46.00 170.00 172.9 5 39.60 42.95 165.50 170.0
场景2:处理任意连续行数(比如第2到第4行)
要是你想处理中间某一段行,调整索引范围就行,比如处理索引1到3的行(也就是第2到第4行):
# 对索引1-3的行的C列除以2 df.loc[df.index[1:4], 'C'] = df.loc[df.index[1:4], 'C'].apply(lambda x: x / 2)
场景3:复杂逻辑的除法(结合其他列的值)
如果你的除法不是固定除数,需要用到同一行其他列的值,lambda就能派上大用场,比如让前3行的C列除以对应行的A列值:
# 前3行C列除以对应行的A列值,axis=1表示按行处理 df.loc[:2, 'C'] = df.loc[:2].apply(lambda row: row['C'] / row['A'], axis=1)
小提示:更高效的替代方案
如果只是简单的固定除数除法,其实不用lambda,直接做向量运算速度更快(尤其是数据量大的时候):
# 前3行C列直接除以100,和lambda效果一样但更高效 df.loc[:2, 'C'] = df.loc[:2, 'C'] / 100
另外,如果你不想修改原DataFrame,记得先复制一份:
df_copy = df.copy() df_copy.loc[:2, 'C'] = df_copy.loc[:2, 'C'].apply(lambda x: x / 100)
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

