Pandas 从导入的excel文件在Python中创建sumproduct和groupby
我有一个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)。 请建议此函数的函数定义。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
如果我正确理解您的要求,这应该可以解决您的问题:
# 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()