簡體   English   中英

pandas dataframe 每2列的百分比差異並生成一個新列

[英]Percentage difference every 2 columns of pandas dataframe and generate a new column

我有一個大的 pandas dataframe 類似於下面的:

Number    A_white   A_black   B_white   B_black    ...   AUV_white   AUV_black
140       0.010    0.567     0.001     0.0075            1.0         1.5
150       100      200       500       1000        ...   500         1000

我正在嘗試使用以下數據生成一個新的 dataframe:

Number    A          B         ...       AUV
140       193.068    152.941             40     
150       66.667     66.667              66.667

在新的 dataframe 中:

new_df['A'] = (old_df.A_white - df.A_black).abs() / ((old_df.A_white + df.A_black)/2) * 100

有一個類似的解決方案: pandas dataframe 任意兩列的百分比差值

但是我有一個很大的 dataframe 並且不能用列名來做。 有沒有一種方法可以使用lociloc來獲得結果?

對於新的 dataframe 的列名稱,我有:

col_names = old_df.columns
col_names = col_names.tolist()
col_names = [x.replace("_white", "") for x in col_names]
del col_names[1::2]

   

您可以將索引轉換為 MultiIndex 並使用xs高級索引

# set non white/black columns aside
df = df.set_index('Number')
# split to MultiIndex
df.columns = pd.MultiIndex.from_tuples(df.columns.str.split('_').to_list())

# select cross-sections
w = df.xs('white', level=1, axis=1)
b = df.xs('black', level=1, axis=1)

# perform the computation
df2 = (abs(w-b)/(w+b)*200).reset_index()

Output:

   Number           A           B        AUV
0     140  193.067591  152.941176  40.000000
1     150   66.666667   66.666667  66.666667

暫無
暫無

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

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