簡體   English   中英

Pandas | 替代 lambda function =>.loc[row_indexer,col_indexer] = value

[英]Pandas | Alternative for lambda function => .loc[row_indexer,col_indexer] = value instead

我有一種方法可以從 pandas dataframe 的兩列中計算加權平均值。 由於這些列不是浮點數據類型,因此必須首先將它們轉換為適當的格式。 在計算之后,它們被轉換回原始格式。

def calculate_weighted_average(self, dataframe, column_for_average, column_for_weight):
    a = dataframe[column_for_average]
    w = dataframe[column_for_weight]
    # convert german decimal to float
    a = a.apply( lambda x : self.convert_german_decimal_to_float(x) )
    # calulate average
    weighted_average = (a * w).sum() / w.sum()
    # convert float to german decimal 
    weighted_average = self.convert_float_to_german_decimal(weighted_average)
    return weighted_average

對於轉換,我使用 Lambda function,它會生成一條警告消息:

SettingWithCopyWarning: 
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

如何使用.loc 定義此方法?

你可以忽略警告,但如果你不想警告試試這個

def calculate_weighted_average(self, dataframe, column_for_average, column_for_weight):
    a = dataframe[column_for_average]
    w = dataframe[column_for_weight]
    # convert german decimal to float
    a1 = a.apply( lambda x : self.convert_german_decimal_to_float(x))
    # calulate average
    weighted_average = (a1 * w).sum() / w.sum()
    # convert float to german decimal 
    weighted_average = self.convert_float_to_german_decimal(weighted_average)
    return weighted_average

暫無
暫無

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

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