簡體   English   中英

Python:如何在 pandas Z6A8064B5DF347945557DZC5 的條件下應用 function?

[英]Python: how to apply a function with condition on a pandas dataframe?

我有一個 pandas dataframe 如下所示:

df
     time   case1   case2   case3
0     5     house   bank     atm
1     3     bank    house  pharmacy
2     10    bank    bank     atm
3     20    house  pharmacy  house

我想將基於時間和案例的概率與每個案例相關聯。 這里我們有每個類別的平均值和標准差。 因此,例如對於p_house ,如果time20-10=1020+10=30之間,我們的概率為1

p_house = [20, 10]
p_bank =  [5, 1]
p_atm  =  [3, 1]
p_pharmacy = [10, 5]

我想應用一個 function 來表示如果在每個案例 p=1 或 p=0 的范圍之間。 我想像這樣申請一個 function

def assignP(df):
    if ((df.time < p.case1 + mu.case) and (df.time > p.case1-mu.case)):
              df.time1 = 1
    else: 
              df.time1 = 0
    if ((df.time < p.case2 + mu.case) and (df.time > p.case2-mu.case)):
              df.time2 = 1
    else: 
              df.time2 = 0
    if ((df.time < p.case3 + mu.case) and (df.time > p.case3-mu.case)):
              df.time3 = 1
    else: 
              df.time3 = 0
    return df

我想要一個如下所示的 dataframe

df
     time   case1   case2   case3          p1      p2     p3
0     5     house   bank     atm           0       1      0
1     3     bank    house  pharmacy        0       0      0
2     10    bank    bank     atm           0       0      0
3     15    house  pharmacy  house         1       1      1

我相信你應該為不同的列寫一個 function 。 使用apply您可以在行或列上運行簡單的 function。 在該 function 中,我將根據平均值/偏差確定 output 值。 也許下面可以給你一個開始:

from io import StringIO

# Create DataFrame
csvstring = StringIO("""
time case1 case2 case3
0 5 house bank atm
1 3 bank house pharmacy
2 10 bank bank atm
3 20 house pharmacy house
""")
df = pd.read_csv(csvstring, sep=" ")

p_house = [20, 10]

def get_phouse(col):
    # Split the p_house value
    (a, b) = p_house
    # If column value between the 20 - 10 or 20 + 10, return 1, otherwise 0
    return 1 if a-b < col < a+b else 0

df['phouse'] = df['time'].apply(get_phouse)
#    time  case1     case2     case3  phouse
# 0     5  house      bank       atm       0
# 1     3   bank     house  pharmacy       0
# 2    10   bank      bank       atm       0
# 3    20  house  pharmacy     house       1

暫無
暫無

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

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