簡體   English   中英

基於多准則和多列的PANDAS新列

[英]PANDAS NEW COLUMN BASED ON MULTIPLE CRITERIA AND COLUMNS

我想使用幾個條件和列為一個大表創建一個新列,並且不確定采用哪種最佳方法。

    df = pd.DataFrame({'a': ['A', "B", "B", "C", "D"],
'b':['y','n','y','n', np.nan], 'c':[10,20,10,40,30], 'd':[.3,.1,.4,.2, .1]})
    df.head()

    def fun(df=df):
        df=df.copy()
        if df.a=='A' & df.b =='n': 
            df['new_Col'] = df.c+df.d
        if df.a=='A' & df.b =='y': 
            df['new_Col'] = df.d *2
        else:
            df['new_Col'] = 0
        return df
    fun()

要么


    def fun(df=df):
            df=df.copy()
            if df.a=='A' & df.b =='n': 
                return = df.c+df.d
            if df.a=='A' & df.b =='y': 
                return  df.d *2
            else:
                return 0
    df['new_Col"] df.apply(fun)

或使用np.where

    df['new_Col'] = np.where(df.a=='A' & df.b =='n', df.c+df.d,0 )
    df['new_Col'] = np.where(df.a=='A' & df.b =='y', df.d *2,0 )

看起來你需要np.select

a, n, y = df.a.eq('A'), df.b.eq('n'), df.b.eq('y')

df['result'] = np.select([a & n, a & y], [df.c + df.d, df.d*2], default=0)

這是一種算術方式( 針對情況a = 'A'b = 'n'我向您的樣本添加了另一行 ):

樣品

Out[1369]:
   a    b   c    d
0  A  y    10  0.3
1  B  n    20  0.1
2  B  y    10  0.4
3  C  n    40  0.2
4  D  NaN  30  0.1
5  A  n    50  0.9

nc = df.a.eq('A') & df.b.eq('y')
mc = df.a.eq('A') & df.b.eq('n')
nr = df.d * 2
mr = df.c + df.d

df['new_col'] = nc*nr + mc*mr

Out[1371]:
   a    b   c    d  new_col
0  A  y    10  0.3  0.6
1  B  n    20  0.1  0.0
2  B  y    10  0.4  0.0
3  C  n    40  0.2  0.0
4  D  NaN  30  0.1  0.0
5  A  n    50  0.9  50.9

暫無
暫無

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

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