簡體   English   中英

Python Pandas - Dataframe - 根據另一列添加列,該列具有來自另外兩列的數學運算

[英]Python Pandas - Dataframe - Add column depending on another column, which has a mathematical operation from another two columns

我有一個 Pandas dataframe 看起來像這樣:

時間戳 地方 數據A 資料 B 數據 C
16508 法國 0.03 0.06 0.15
16510 英國 0.05 0.07 0.11
16515 英國 0.04 0.03 0.87

我想做的是以下幾點:

  • 為“位置”列中的每個不同值添加一個新列。
  • 在這個新列中,添加數據 A 和數據 B 之間的百分比(數據 A / 數據 B * 100)。

預期的 output 將是:

時間戳 地方 數據A 資料 B 數據 C 去法國 去英格蘭
16508 法國 0.03 0.06 0.15 50 0
16510 英國 0.05 0.07 0.11 0 71.42
16515 英國 0.04 0.03 0.87 0 133.33

我嘗試了以下方法:

for column in data['Place'].unique():
    column_name = f'To {Place}'
    data[column_name] = data[data['Place'] == column]['Data A'].div(['Data B'])*100
    data[column_name].fillna(method='ffill', inplace=True)
    data[column_name].fillna(value=0, inplace=True)

但它不起作用。 我收到“'list' object has no attribute 'div'”錯誤。 我嘗試了其他不同的方法,但它們也不起作用。

有人可以幫我解決這個問題嗎?

IIUC,您可以嘗試使用pivot

df["Ratio"] = df["Data A"].div(df["Data B"])

output = df.drop("Ratio", axis=1).join(df.pivot(None, "Place", "Ratio").mul(100).fillna(0).add_prefix("To "))

>>> output
     Place  Data A  Data B  Data C  To England  To France
0   France    0.03    0.06    0.15    0.000000       50.0
1  England    0.05    0.07    0.11   71.428571        0.0
2  England    0.04    0.03    0.87  133.333333        0.0

我會這樣做:

df_ratio = ((df['Data A'].div(df['Data B'])*100).to_frame()
               .assign(col='To '+df['Place'])
               .set_index('col', append=True)[0]
               .unstack(fill_value=0))

pd.concat([df, df_ratio], axis=1))

Output:

   timestamp    Place  Data A  Data B  Data C  To England  To France
0      16508   France    0.03    0.06    0.15    0.000000       50.0
1      16510  England    0.05    0.07    0.11   71.428571        0.0
2      16515  England    0.04    0.03    0.87  133.333333        0.0

暫無
暫無

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

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