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

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

Pandas - 基于與另一列的交叉引用計算新值

Pandas - 基于與另一列的交叉引用計算新值

慕娘9325324 2021-12-29 18:26:22
我正在嘗試計算一列中的新值,該列的值與另一列交叉引用。>>> import pandas as pd>>> df = pd.DataFrame( {"A":[0., 100., 80., 40., 0., 60.],                         "B":[12,  12,   3,  19,  3,  19]} )>>> df       A   B0    0.0  121  100.0  122   80.0   33   40.0  194    0.0   35   60.0  19我想找到 A 列中所有為 0 的值,找出 B 列中的相應值,然后根據某個函數更改具有相同 B 列值的所有 A 列值。例如,在上面的示例中,我想將 A 列的前兩個值df.A[0]和df.A[1]0. 和 100. 分別更改為 0.5 和 99.5,因為df.A[0]是 0. 并且它df.B[0] = 12在 B 列中的值與df.B[1] = 12.df      A   B0   0.5  121  99.5  122  79.5   33  40.0  194   0.5   35  60.0  19我嘗試鏈接 loc、aggregate、groupby 和 mask 功能,但我沒有成功。是通過 for 循環的唯一方法嗎?
查看完整描述

2 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

這將起作用:


import pandas as pd


df = pd.DataFrame( {"A":[0., 100., 40., 60.], "B":[12, 12, 19, 19]} )


def f(series):

    return (series + 0.5).where(series == 0, series - 0.5)


B_value = df.loc[df['A'] == 0, 'B'][0]

df.loc[df['B'] == B_value, 'A'] = df.loc[df['B'] == B_value, 'A'].transform(f)


print(df)

輸出:


      A   B

0   0.5  12

1  99.5  12

2  40.0  19

3  60.0  19

您可以將任意函數傳遞到transform.


可能有一種更簡潔的方法來做到這一點;它讓我覺得有點凌亂。


查看完整回答
反對 回復 2021-12-29
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

我找到了一個可行的解決方案,盡管可能不是最優的。我鏈接groupby,過濾和轉換以獲得所需的系列,然后替換原始數據幀中的結果。


import pandas as pd

df = pd.DataFrame( {"A":[0., 100., 80., 40., 0., 60.], 

                    "B":[12,  12,   3,  19,  3,  19]} )

u = ( df.groupby(by="B",  sort=False)

         .filter(lambda x: x.A.min() == 0, dropna=False)

         .A.transform( lambda x: (x+0.5).where(x == 0, x - 0.5) ) 

    )

df.loc[pd.notnull(u), "A"] = u

給出以下結果


print("\ninitial df\n",df,"\n\nintermediate series\n",u,"\n\nfinal result",df)


initial df

        A   B

0    0.0  12

1  100.0  12

2   80.0   3

3   40.0  19

4    0.0   3

5   60.0  19


intermediate series

 0     0.5

1    99.5

2    79.5

3     NaN

4     0.5

5     NaN

Name: A, dtype: float64


final result       A   B

0   0.5  12

1  99.5  12

2  79.5   3

3  40.0  19

4   0.5   3

5  60.0  19


查看完整回答
反對 回復 2021-12-29
  • 2 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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