亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python Pandas:將特定函數應用于每一行

Python Pandas:將特定函數應用于每一行

呼如林 2023-05-09 09:56:27
我正在嘗試對我擁有的數據應用一種規范化形式。我希望從數據框中的每個值中減去每行的中值。到目前為止我所擁有的:# Generate sample datadata = { "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 rowmedian_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,40,-33,-34,13,16我看過df.apply(<function>, axis=1),但無法弄清楚如何跨行迭代應用特定于行的函數的語法。
查看完整描述

3 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

用于DataFrame.select_dtypes獲取數字列并減去DataFrame.subwith?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


查看完整回答
反對 回復 2023-05-09
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

嘗試:

df.sub(df.median(axis=1), axis=0)


查看完整回答
反對 回復 2023-05-09
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

我只允許自己使用數字部分


import pandas as pd

# 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],

   }

keys = ['col1','col2','col3','col4','col5']

df = pd.DataFrame(data)

print(df)

# calculate medians of each row

median_ls = list(df.median(axis=1))

# [19.0, 23.0, 14.0, 49.0, 55.0, 53.0]

print(median_ls)

print(df[keys].subtract(median_ls, axis=0))

結果:


   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


查看完整回答
反對 回復 2023-05-09
  • 3 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號