数据帧中的Python计算

2024-10-06 11:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在数据帧中计算有问题。你知道吗

我在计算

  • %-每列更改
  • %-基于行和的每列共享

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

(A栏%-变动*A栏%-份额)+(B栏%-变动*B栏%-份额)+(C栏%-变动*C栏%-份额)依此类推。你知道吗

我想到了两种方法来实现这一点,尽管两种方法都不起作用……当然,我希望尽可能动态地实现这一点,因为列的数量会有所不同。你知道吗

下面是一些获取合适数据帧的代码:

    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'])

想法二: 我想分两步来做。第一步是将每列的%-份额和%-变化相乘。第二步是在新的代码行中汇总新的列。问题是我不能动态地做。我将不得不手动选择我需要总结的列,但是如果我有100列的话,那将是非常乏味的工作。你知道吗

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

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

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

非常感谢!你知道吗


Tags: to数据sharecolchangelistpd百分比
1条回答
网友
1楼 · 发布于 2024-10-06 11:28:48

你可以试着用数据帧.apply具有lumbda功能。你知道吗

# 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

相关问题 更多 >