簡體   English   中英

如何計算百分比並將其存儲在新列中?

[英]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_2TIME_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.

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