簡體   English   中英

Python pandas dataframe 將 ZC1C425268E68385D1AB5074F NaZ7 的結果應用於多個列

[英]Python pandas dataframe apply result of function to multiple columns where NaN

我有一個包含三列的 dataframe 和一個 function,它根據 x 列的值計算 y 列和 z 列的值。 我只需要計算缺少 NaN 的值。

def calculate(x):
    return 1, 2

df = pd.DataFrame({'x':['a', 'b', 'c', 'd', 'e', 'f'], 'y':[np.NaN, np.NaN, np.NaN, 'a1', 'b2', 'c3'], 'z':[np.NaN, np.NaN, np.NaN, 'a2', 'b1', 'c4']})

 x    y    z
0  a  NaN  NaN
1  b  NaN  NaN
2  c  NaN  NaN
3  d   a1   a2
4  e   b2   b1
5  f   c3   c4

mask = (df.isnull().any(axis=1))

df[['y', 'z']] = df[mask].apply(calculate, axis=1, result_type='expand')

但是,我得到以下結果,盡管我只適用於蒙面集。 不確定我做錯了什么。

    x   y   z
0   a   1.0 2.0
1   b   1.0 2.0
2   c   1.0 2.0
3   d   NaN NaN
4   e   NaN NaN
5   f   NaN NaN

如果掩碼反轉,我會得到以下結果:

df[['y', 'z']] = df[~mask].apply(calculate, axis=1, result_type='expand')
    x   y   z
0   a   NaN NaN
1   b   NaN NaN
2   c   NaN NaN
3   d   1.0 2.0
4   e   1.0 2.0
5   f   1.0 2.0

預期結果:

   x    y    z
0  a  1.0   2.0
1  b  1.0   2.0
2  c  1.0   2.0
3  d   a1   a2
4  e   b2   b1
5  f   c3   c4

您可以在計算完整的 dataframe 和set_axis后填寫

out = (df.fillna(df.apply(calculate, axis=1, result_type='expand')
                       .set_axis(['y','z'],inplace=False,axis=1)))

print(out)

   x   y   z
0  a   1   2
1  b   1   2
2  c   1   2
3  d  a1  a2
4  e  b2  b1
5  f  c3  c4

嘗試:

df.loc[mask,["y","z"]] = pd.DataFrame(df.loc[mask].apply(calculate, axis=1).to_list(), index=df[mask].index, columns = ["y","z"])

print(df)

        x   y   z
    0   a   1   2
    1   b   1   2
    2   c   1   2
    3   d   a1  a2
    4   e   b2  b1
    5   f   c3  c4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM