Pandas 从导入的excel文件在Python中创建sumproduct和groupby

Pandas 从导入的excel文件在Python中创建sumproduct和groupby,pandas,dataframe,Pandas,Dataframe,我有一个excel文件,里面有关于股票价格的数据。有4列:股票代码、数据、价格和交易单位数量。我已经成功地导入了Python中的数据,现在我需要将价格乘以每个股票代码的单位数。excel文件中有10类股票代码和33900条观察结果。我需要用Python编写一个函数,将每个日期和组的价格和交易单位数量乘以股票代码值。 到目前为止,我已经做了: 作为pd进口熊猫 df=pd.read\u excel(r'E:\Assignment\InputData\u test1a\u Py.xlsx',shee

我有一个excel文件,里面有关于股票价格的数据。有4列:股票代码、数据、价格和交易单位数量。我已经成功地导入了Python中的数据,现在我需要将价格乘以每个股票代码的单位数。excel文件中有10类股票代码和33900条观察结果。我需要用Python编写一个函数,将每个日期和组的价格和交易单位数量乘以股票代码值。 到目前为止,我已经做了: 作为pd进口熊猫 df=pd.read\u excel(r'E:\Assignment\InputData\u test1a\u Py.xlsx',sheet\u name='RawData') 打印(df)。 请建议此函数的函数定义。

如果我正确理解您的要求,这应该可以解决您的问题:

# Generate a dataframe that is similar to yours
df = pd.DataFrame(
    {
        'Ticker':[f'Id{i}' for i in range(1,8,1)],
        'Date':['03-Jan-07'] * 7,
        'Prices':[95,989,110,125,160,240,333],
        'Close Units':[num / 10_000 for num in range(1,8,1)]
    }
)

# Assign new column Value, which is the product of Prices and Close Units
# groupby and sum
df_out = (
    df
    .assign(Value = df['Prices'] * df['Close Units'])
    .groupby(['Ticker','Date'])
    ['Value']
    .sum()
)

您应该通过
Ticker
Date

                    Value
Ticker  Date    
Id1     03-Jan-07   0.0095
Id2     03-Jan-07   0.1978
Id3     03-Jan-07   0.0330
Id4     03-Jan-07   0.0500
Id5     03-Jan-07   0.0800
Id6     03-Jan-07   0.1440
Id7     03-Jan-07   0.2331


与其发布图像,不如发布一个表,以便其他人可以轻松地重新创建您的数据帧。当然,让我来try@Toukenize我无法插入表格,您能否尝试将表格内容复制到Stackoverflow中,然后选择表格内容,然后选择
Ctrl+K
@Toukenize It's not working什么是['Value']做什么?选择列以应用你的
sum
i要将df导出到excel文件,我得到以下错误:df.to\u excel(r'E:\Assignment\InputData\u test1a\u Py.xlsx',sheet\u name='OutputFormat',index=False,header=True)PermissionError Traceback(上次调用)E:\Anaconda\AnacondaSetup\lib\site packages\xlsxwriter\workbook.py in close(self)319 try:-->320 self.\u store\u workbook()321除了IOError作为e:@Toukenize使用您的解决方案我得到了所有33900个观察结果我希望它们按类别分组,因为有10个股票我希望时间序列图为索引级别,并希望将其保存为pdf。在此之前的代码是:df['IndexLevel']=df['Prices']*df['Close Units']df['IndexLevel']=df['IndexLevel'].cumsum()打印(df)
df['Amount'] = df['Close Units'] * df['Prices']
df.groupby(['Ticker', 'Date'])['Amount'].sum()