最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Pandas實(shí)現(xiàn)根據(jù)多列的值生成新的列

 更新時(shí)間:2026年02月02日 08:44:49   作者:小滿大王i  
在 Pandas 中,可以根據(jù) 多列的值 生成新的列,這篇文章主要和大家詳細(xì)介紹了一些常見的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

在 Pandas 中,可以根據(jù) 多列的值 生成新的列,常見的方法包括:

  • apply() + 自定義函數(shù)(最靈活)
  • np.where()np.select()(條件判斷)
  • 直接數(shù)學(xué)運(yùn)算(如 df['A'] + df['B']
  • assign() + lambda(鏈?zhǔn)讲僮鳎?/li>
  • eval()(高效計(jì)算,但需謹(jǐn)慎使用)

1. 使用apply()+ 自定義函數(shù)(推薦)

適用于 復(fù)雜邏輯,可以基于多列計(jì)算新列。

import pandas as pd

df = pd.DataFrame({
    'math': [90, 80, 70],
    'english': [85, 75, 65],
    'science': [88, 92, 78]
})

# 定義一個(gè)函數(shù),基于多列計(jì)算平均分
def calculate_average(row):
    return (row['math'] + row['english'] + row['science']) / 3

# 使用 apply() 按行計(jì)算
df['average'] = df.apply(calculate_average, axis=1)

print(df)

輸出

   math  english  science    average
0    90       85       88  87.666667
1    80       75       92  82.333333
2    70       65       78  71.000000

優(yōu)化:使用lambda簡(jiǎn)化

df['average'] = df.apply(lambda row: (row['math'] + row['english'] + row['science']) / 3, axis=1)

2. 使用np.where()或np.select()(條件判斷)

適用于 基于多列條件 生成新列。

(1)np.where()(二分類)

import numpy as np

# 如果 math 和 english 都 > 80,則 '優(yōu)秀',否則 '普通'
df['grade'] = np.where((df['math'] > 80) & (df['english'] > 80), '優(yōu)秀', '普通')

print(df)

輸出

   math  english  science    average grade
0    90       85       88  87.666667    優(yōu)秀
1    80       75       92  82.333333    普通
2    70       65       78  71.000000    普通

(2)np.select()(多條件)

conditions = [
    (df['math'] >= 90) & (df['english'] >= 90),
    (df['math'] >= 80) & (df['english'] >= 80),
    (df['math'] >= 70) & (df['english'] >= 70)
]
choices = ['A', 'B', 'C']

df['grade'] = np.select(conditions, choices, default='D')

print(df)

輸出

   math  english  science    average grade
0    90       85       88  87.666667      B
1    80       75       92  82.333333      C
2    70       65       78  71.000000      D

3. 直接數(shù)學(xué)運(yùn)算(簡(jiǎn)單計(jì)算)

適用于 多列直接運(yùn)算(如加權(quán)平均、總分等)。

# 計(jì)算總分(math + english + science)
df['total'] = df['math'] + df['english'] + df['science']

# 計(jì)算加權(quán)平均(math 權(quán)重 0.5,english 0.3,science 0.2)
df['weighted_avg'] = df['math'] * 0.5 + df['english'] * 0.3 + df['science'] * 0.2

print(df)

輸出

   math  english  science  total  weighted_avg
0    90       85       88    263     87.300000
1    80       75       92    247     79.900000
2    70       65       78    213     70.100000

4. 使用assign()+lambda(鏈?zhǔn)讲僮鳎?/h2>

適用于 不修改原 DataFrame,而是返回新 DataFrame。

df = df.assign(
    total=lambda x: x['math'] + x['english'] + x['science'],
    weighted_avg=lambda x: x['math'] * 0.5 + x['english'] * 0.3 + x['science'] * 0.2
)

print(df)

輸出

   math  english  science  total  weighted_avg
0    90       85       88    263     87.300000
1    80       75       92    247     79.900000
2    70       65       78    213     70.100000

5. 使用eval()(高效計(jì)算,但需謹(jǐn)慎)

適用于 快速計(jì)算,但可能影響可讀性。

# 計(jì)算總分
df['total'] = df.eval('math + english + science')

# 計(jì)算加權(quán)平均
df['weighted_avg'] = df.eval('math * 0.5 + english * 0.3 + science * 0.2')

print(df)

輸出

   math  english  science  total  weighted_avg
0    90       85       88    263     87.300000
1    80       75       92    247     79.900000
2    70       65       78    213     70.100000

總結(jié)

方法適用場(chǎng)景示例
apply() + 自定義函數(shù)復(fù)雜邏輯df.apply(lambda row: row['A'] + row['B'], axis=1)
np.where() / np.select()條件判斷np.where((df['A'] > 0) & (df['B'] < 0), '符合', '不符合')
直接運(yùn)算簡(jiǎn)單計(jì)算df['total'] = df['A'] + df['B'] + df['C']
assign() + lambda鏈?zhǔn)讲僮?/td>df.assign(new_col=lambda x: x['A'] * 2)
eval()高效計(jì)算df.eval('A + B * C')

最佳實(shí)踐

  • 簡(jiǎn)單計(jì)算 → 直接 + - * /assign()
  • 復(fù)雜邏輯apply() + lambda 或自定義函數(shù)
  • 條件判斷np.where()(二分類)或 np.select()(多條件)
  • 避免 eval()(除非性能關(guān)鍵,否則可讀性較差)

示例:綜合應(yīng)用

# 計(jì)算總分
df['total'] = df['math'] + df['english'] + df['science']

# 計(jì)算加權(quán)平均
df['weighted_avg'] = df.eval('math * 0.5 + english * 0.3 + science * 0.2')

# 判斷是否優(yōu)秀(math 和 english 都 > 85)
df['is_excellent'] = np.where((df['math'] > 85) & (df['english'] > 85), 'Yes', 'No')

print(df)

輸出

   math  english  science  total  weighted_avg is_excellent
0    90       85       88    263     87.300000           No
1    80       75       92    247     79.900000           No
2    70       65       78    213     70.100000           No

這樣,你可以靈活地基于多列數(shù)據(jù)生成新列! 

到此這篇關(guān)于Python Pandas實(shí)現(xiàn)根據(jù)多列的值生成新的列的文章就介紹到這了,更多相關(guān)Pandas根據(jù)多列的值生成列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

剑河县| 通渭县| 固原市| 千阳县| 无为县| 丹棱县| 肥乡县| 万载县| 钦州市| 手机| 潼关县| 吴桥县| 铜鼓县| 衡阳市| 长宁区| 九江县| 南乐县| 遂溪县| 夹江县| 永靖县| 和田县| 泗水县| 永城市| 莲花县| 徐水县| 定西市| 盐津县| 镇雄县| 西青区| 玛沁县| 沂水县| 桐庐县| 扶风县| 汶上县| 吉隆县| 宝兴县| 饶河县| 福贡县| 个旧市| 东乌珠穆沁旗| 鲁山县|