Python - 在数据帧中计算

Python - Calculating in dataframes

我在数据帧中计算时遇到问题。

我正在计算

现在我想根据每列的份额百分比计算每列的变化百分比。我会这样做:

(col A %-change * col A %-share) + (col B %-change * col B %-share) + (col C %-change * col C %-share) 等等。

我想到了两种方法来做到这一点,但都没有用......而且 - 当然 - 我想尽可能动态地做到这一点,因为列数会有所不同。

这里有一些代码可以得到合适的数据框:

    import pandas as pd
    import numpy as np

    df1 = pd.DataFrame(np.array([
    ['2019-04-29', 5, 5, 10],
    ['2019-04-28', 10, 10, 50],
    ['2019-04-27', 20, 5, 100]]),
    columns=['Date', 'attr1', 'attr2', 'attr3'])

    df1["attr1"] = pd.to_numeric(df1["attr1"])
    df1["attr2"] = pd.to_numeric(df1["attr2"])
    df1["attr3"] = pd.to_numeric(df1["attr3"])

    df1 = df1.set_index(['Date'])
    col_list= list(df1)

    df1['sum'] = df1[col_list].sum(axis=1)

    for i in col_list:
    df1[i + ' %-change'] = df1[i].pct_change()*100
    df1[i + " %-share"] = df1[i]/ df1['sum']

想法 1: 基本上我正在尝试上面提到的公式。因此,将每列的份额百分比和变化百分比相乘,然后将它们相加。我考虑过使用 .sum 但不知道如何在这种特定情况下使用它。

df1[i + ' %-change incl share'] = (df1[i + ' %-share'] * df1[i + ' %-change'])

想法二: 考虑分两步进行。第一步是将每列的份额百分比和变化百分比相乘。第二步是在新代码行中汇总新列。问题是我不能动态地做到这一点。我将不得不手动 select 我需要汇总的列,但如果我有 100 列,那确实是一项乏味的工作。

我想过将新计算的列写入一个新的数据框中,这样我就得到了我需要的所有列,但是数据框中的数据对我来说毫无意义。

df2[i + ' %-change incl share'] = (df1[i + ' %-share'] * df1[i + ' %-change'])

一如既往,我们非常感谢您的帮助。

非常感谢!

您可以尝试将 dataframe.apply 与 lambda 函数一起使用。

# get the column name out
changeCol = [col for col in df1.columns if 'change' in col]
shareCol = [col for col in df1.columns if 'share' in col]

# calculate
result = df1.apply(lambda x: sum([x[changeCol[i]]*x[shareCol[i]] for i in range(len(changeCol))]), axis=1)

# after you could append the result to your dataframe or do whatever you like.
# df1["result"] = result
# ...


[参考] pandas.DataFrame.apply