我正在使用JupyterLab以特定的方式在电子表格中打印一些数据。你知道吗
我有两个不同的文件:
对于每个原始的\id==id,我想按国家分组,列出品牌,总结并列出每个品牌的持有量。你知道吗
我的代码得到的结果是:
FundID Domicile (brand, AUM)
0 A1 IT (BBB, 10.0), UK (BBB, 7.0),
1 B2 CH (AAA, 12.0),
2 C3 DE (CCC, 5.0),
3 D4 CH (EEE, 9.0), UK (EEE, 11.0),
而我的目标是得到这样的东西:
代码是
import numpy as np
import pandas as pd
pd.set_option('display.max_columns', 500)
df_fofs = pd.read_excel('SampleDF.xlsx')
df_extract = pd.read_excel('SampleID_ex.xlsx')
df_extract
original_id
0 A1
1 B2
2 C3
3 D4
df_fofs
brand country id holding
0 AAA UK A1 2000000
1 AAA CH B2 4000000
2 BBB UK A1 7000000
3 CCC DE C3 5000000
4 BBB IT A1 10000000
5 EEE UK D4 11000000
6 EEE CH D4 3000000
7 EEE CH D4 6000000
8 AAA CH B2 8000000
fund_ids = list(df_extract['original_id'])
result = {}
for fund in fund_ids:
temp = []
df_funds = df_fofs[(df_fofs['id'] == fund )][['country', 'brand', 'holding']]
domicile_fof = df_fofs[df_fofs['id'] == fund ][['country', 'holding']]
df_funds = df_funds.groupby(['country', 'brand'])["holding"].sum()
domicile_fof = domicile_fof.groupby('country')["holding"].sum()
s = ''
for i in range(len(df_funds)):
row = df_funds.reset_index().iloc[i]
if row['holding'] >= 5000000:
s += row['country'] + ' (' + str(row['brand']) + ', ' + str(round(((row['holding'])/1000000), 2)) + '), '
result[fund] = [s]
df_result = pd.DataFrame.from_dict(result, orient = 'index')
df_result.reset_index(inplace = True)
df_result.columns = ['FundID', 'Domicile (brand, AUM)']
df_result
FundID Domicile (brand, AUM)
0 A1 IT (BBB, 10.0), UK (BBB, 7.0),
1 B2 CH (AAA, 12.0),
2 C3 DE (CCC, 5.0),
3 D4 CH (EEE, 9.0), UK (EEE, 11.0),
您可以组合id、groupbyid和country上的表来生成内部项,然后只保存groupbyid来创建外部级别
试试这个
您需要的是函数
pandas.DataFrame.pivot_table
。文档在这里pandas/pivot_table。你知道吗这段代码解决了您的示例(而不是我使用的多索引列表)
结果是 resulting dataframe
相关问题 更多 >
编程相关推荐