[英]Pandas: Generate a Dataframe column which has values depending on another column of a 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 |
我想做的是以下幾點:
預期的 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.