[英]How to calculate percentage and store it in a new column?
我有以下數據框,我想添加一個帶有百分比值的新列:
df =
TIME_1 TIME_2
80 150
120 20
我想獲得一個新的列TIME_1_PROC
,它將存儲TIME_1 + TIME_2
的TIME_1
的百分比值。
這是我的代碼,但是會觸發警告:
df.TIME_1_PROC = (df.TIME_1*100/(df.TIME_1+df.TIME_2))
警告:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
這將創建一個新變量:
df['TIME1_PROC'] = (df.TIME_1 * 100 / (df.TIME_1 + df.TIME_2))
Out[27]:
TIME_1 TIME_2 TIME1_PROC
0 80 150 34.782609
1 120 20 85.714286
只需快速闡述@Imo的正確答案。 大多數情況下,最好創建和引用像這樣的列:
df['x']
而不是這樣:
df.x
創建新變量時,必須使用第一種方法。 但是,即使對於現有變量,第一種方法也被認為更好,因為如果碰巧有一個名為“索引”的列,則可以避免潛在的錯誤。 例如,如果您輸入df.index
,它將返回索引或名為“ index”的列嗎? 當然,有時我們所有人都將屬性樣式用作快捷方式,因此,也許更合理的經驗法則是僅在右側使用快捷方式。
綜上所述,這里的熊貓行為似乎並不理想。 您在此處收到的警告消息是大熊貓中的常見消息,並且通常是可忽略的(因為它在此處)。 但是不幸的是,您沒有收到有關嘗試訪問不存在的列的錯誤消息。 並進一步考慮以下幾點:
df['TIME_1_PROC'] # KeyError: 'TIME_1_PROC'
df.TIME_1_PROC
0 34.782609
1 85.714286
dtype: float64
因此,確實創建了新列,但是將其作為屬性而不是列。 為了更加明確,通常當我們使用屬性樣式引用時,pandas會將其解釋為引用列。 但是在這種情況下,它實際上是一件禮物(那不是您想要的)。
使用pd.set_option('chained',None)避免此類消息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.