Project_Carmignac/Migration.ipynb

1457 lines
222 KiB
Plaintext
Raw Normal View History

2026-01-29 18:40:49 +01:00
{
"cells": [
{
"cell_type": "markdown",
"id": "a9037fe3-296e-4a21-b1e5-4763090ef36f",
"metadata": {},
"source": [
"# Migration de comptes"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "fe2bc65b-0c8a-4335-83e9-f339c82f33a1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fichiers Flows : ['projet-bdc-data/carmignac/Flows ENSAE V1 -20251027.csv', 'projet-bdc-data/carmignac/Flows ENSAE V2 -20251105.csv']\n",
"Fichiers AUM : ['projet-bdc-data/carmignac/AUM ENSAE V1 -20251027.csv', 'projet-bdc-data/carmignac/AUM ENSAE V2 -20251105.csv']\n"
]
}
],
"source": [
"# Import des données\n",
"\n",
"import os\n",
"import s3fs\n",
"import pandas as pd\n",
"\n",
"s3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n",
"\n",
"fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': s3_ENDPOINT_URL})\n",
"\n",
"BUCKET = \"projet-bdc-data\"\n",
"carmignac_path = \"projet-bdc-data/carmignac\"\n",
"\n",
"# Liste des fichiers FLOWS\n",
"all_files = fs.ls(carmignac_path)\n",
"flows_files = [f for f in all_files if \"Flows\" in f and f.endswith(\".csv\")]\n",
"print(\"Fichiers Flows :\", flows_files)\n",
"\n",
"# Lire tous les fichiers dans un dictionnaire\n",
"flows_data = {}\n",
"for file_path in flows_files:\n",
" with fs.open(file_path, 'r') as f:\n",
" df = pd.read_csv(f, sep=';',low_memory=False)\n",
" flows_data[os.path.basename(file_path)] = df\n",
"\n",
"\n",
"# Liste des fichiers AUM\n",
"all_files = fs.ls(carmignac_path)\n",
"aum_files = [f for f in all_files if \"AUM\" in f and f.endswith(\".csv\")]\n",
"print(\"Fichiers AUM :\", aum_files)\n",
"\n",
"# Lire tous les fichiers dans un dictionnaire\n",
"aum_data = {}\n",
"for file_path in aum_files:\n",
" with fs.open(file_path, 'r') as f:\n",
" df = pd.read_csv(f, sep=';',low_memory=False)\n",
" aum_data[os.path.basename(file_path)] = df\n",
"\n",
"df = aum_data['AUM ENSAE V2 -20251105.csv']\n",
"dg = flows_data['Flows ENSAE V2 -20251105.csv']"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e5739d0e-e4e2-473f-8561-89278a8105a3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>date</th>\n",
" <th>old_account</th>\n",
" <th>new_account</th>\n",
" <th>value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2019-12-31</td>\n",
" <td>406533</td>\n",
" <td>200127202</td>\n",
" <td>7.184443e+05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2016-06-30</td>\n",
" <td>402699</td>\n",
" <td>200038850</td>\n",
" <td>2.237343e+05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2015-07-31</td>\n",
" <td>402703</td>\n",
" <td>200013353</td>\n",
" <td>8.888675e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2019-12-31</td>\n",
" <td>404813</td>\n",
" <td>200127636</td>\n",
" <td>1.608203e+05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2015-03-31</td>\n",
" <td>406311</td>\n",
" <td>200001401</td>\n",
" <td>6.326882e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5516</th>\n",
" <td>2019-12-31</td>\n",
" <td>200093279</td>\n",
" <td>200127383</td>\n",
" <td>1.518258e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5517</th>\n",
" <td>2016-11-30</td>\n",
" <td>200040897</td>\n",
" <td>200054018</td>\n",
" <td>4.775338e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5519</th>\n",
" <td>2016-08-31</td>\n",
" <td>200042389</td>\n",
" <td>200044787</td>\n",
" <td>2.668920e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5521</th>\n",
" <td>2016-11-30</td>\n",
" <td>200048502</td>\n",
" <td>200054019</td>\n",
" <td>3.549803e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5524</th>\n",
" <td>2018-12-31</td>\n",
" <td>200090792</td>\n",
" <td>200117574</td>\n",
" <td>2.123958e+05</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>548 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" date old_account new_account value\n",
"0 2019-12-31 406533 200127202 7.184443e+05\n",
"3 2016-06-30 402699 200038850 2.237343e+05\n",
"4 2015-07-31 402703 200013353 8.888675e+04\n",
"5 2019-12-31 404813 200127636 1.608203e+05\n",
"7 2015-03-31 406311 200001401 6.326882e+04\n",
"... ... ... ... ...\n",
"5516 2019-12-31 200093279 200127383 1.518258e+07\n",
"5517 2016-11-30 200040897 200054018 4.775338e+04\n",
"5519 2016-08-31 200042389 200044787 2.668920e+04\n",
"5521 2016-11-30 200048502 200054019 3.549803e+04\n",
"5524 2018-12-31 200090792 200117574 2.123958e+05\n",
"\n",
"[548 rows x 4 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 548 connexions trouvées\n",
"from detection_rupture import detect_ruptures, check_isin_continuity\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"\n",
"ruptures_df = detect_ruptures(df, 0.05)\n",
"ruptures_df"
]
},
{
"cell_type": "markdown",
"id": "27bb5cd0-8900-408c-8d4f-2a0692b13179",
"metadata": {},
"source": [
"## Ruptures par date"
]
},
{
"cell_type": "code",
"execution_count": 71,
"id": "752f5ee3-7c4d-4b8d-913d-d8ffcc32fe17",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Copier pour éviter les effets de bord\n",
"df_plot = ruptures_df.copy()\n",
"df_plot['date'] = pd.to_datetime(df_plot['date'])\n",
"\n",
"# Compter les ruptures par date\n",
"counts = df_plot.groupby('date').size().reset_index(name='rupture_count')\n",
"\n",
"plt.figure(figsize=(10, 5))\n",
"plt.plot(counts['date'], counts['rupture_count'], marker='.')\n",
"plt.xlabel(\"Date\")\n",
"plt.ylabel(\"Number of account migrations\")\n",
"plt.title(\"Number of migrations detected by date\")\n",
"plt.grid(True)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "9fd1c550-96d5-46c7-8a01-903d4f485502",
"metadata": {},
"source": [
"## Vérification de la continuité par ISIN"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "f55d53a6-39fb-4d12-bfdc-1ad0c9ff5fd5",
"metadata": {},
"outputs": [],
"source": [
"result_ISIN = check_isin_continuity(df, ruptures_df, tol=0.10)\n",
"result_ISIN_false = result_ISIN[result_ISIN['check'] == False]\n",
"results_ISIN_unique = result_ISIN_false.iloc[:, :3].drop_duplicates()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "02a134ce-944b-46d4-8921-747baa6e8e2b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"105"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(results_ISIN_unique)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "c5f692e7-0fa6-470e-91c5-a7901b7c3eb7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>date</th>\n",
" <th>old_account</th>\n",
" <th>new_account</th>\n",
" <th>value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2019-12-31</td>\n",
" <td>406533</td>\n",
" <td>200127202</td>\n",
" <td>7.184443e+05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2016-06-30</td>\n",
" <td>402699</td>\n",
" <td>200038850</td>\n",
" <td>2.237343e+05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2015-07-31</td>\n",
" <td>402703</td>\n",
" <td>200013353</td>\n",
" <td>8.888675e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2019-12-31</td>\n",
" <td>404813</td>\n",
" <td>200127636</td>\n",
" <td>1.608203e+05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2015-03-31</td>\n",
" <td>406311</td>\n",
" <td>200001401</td>\n",
" <td>6.326882e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>438</th>\n",
" <td>2019-12-31</td>\n",
" <td>200093279</td>\n",
" <td>200127383</td>\n",
" <td>1.518258e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>439</th>\n",
" <td>2016-11-30</td>\n",
" <td>200040897</td>\n",
" <td>200054018</td>\n",
" <td>4.775338e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>440</th>\n",
" <td>2016-08-31</td>\n",
" <td>200042389</td>\n",
" <td>200044787</td>\n",
" <td>2.668920e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>441</th>\n",
" <td>2016-11-30</td>\n",
" <td>200048502</td>\n",
" <td>200054019</td>\n",
" <td>3.549803e+04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>442</th>\n",
" <td>2018-12-31</td>\n",
" <td>200090792</td>\n",
" <td>200117574</td>\n",
" <td>2.123958e+05</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>443 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" date old_account new_account value\n",
"0 2019-12-31 406533 200127202 7.184443e+05\n",
"1 2016-06-30 402699 200038850 2.237343e+05\n",
"2 2015-07-31 402703 200013353 8.888675e+04\n",
"3 2019-12-31 404813 200127636 1.608203e+05\n",
"4 2015-03-31 406311 200001401 6.326882e+04\n",
".. ... ... ... ...\n",
"438 2019-12-31 200093279 200127383 1.518258e+07\n",
"439 2016-11-30 200040897 200054018 4.775338e+04\n",
"440 2016-08-31 200042389 200044787 2.668920e+04\n",
"441 2016-11-30 200048502 200054019 3.549803e+04\n",
"442 2018-12-31 200090792 200117574 2.123958e+05\n",
"\n",
"[443 rows x 4 columns]"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Colonnes communes pour comparer\n",
"cols = ['date', 'old_account', 'new_account']\n",
"\n",
"# Merge avec indicateur\n",
"rupture_filtered = ruptures_df.merge(\n",
" results_ISIN_unique[cols],\n",
" on=cols,\n",
" how='left',\n",
" indicator=True\n",
")\n",
"\n",
"# Ne garder que les lignes qui ne sont pas dans results_ISIN_unique\n",
"rupture_filtered = rupture_filtered[rupture_filtered['_merge'] == 'left_only'].drop(columns=['_merge'])\n",
"\n",
"rupture_filtered.reset_index(drop=True, inplace=True)\n",
"\n",
"rupture_filtered\n",
"\n",
"# 443 connexions retenues"
]
},
{
"cell_type": "markdown",
"id": "207c6df5-1b0a-4c06-9cd0-848c958db371",
"metadata": {},
"source": [
"## Prise en compte des migrations avant le clustering"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "185fd578-bbab-4fe7-be7d-33e259577eb2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Agreement - Code</th>\n",
" <th>Company - Id</th>\n",
" <th>Company - Ultimate Parent Id</th>\n",
" <th>Registrar Account - ID</th>\n",
" <th>Registrar Account - Region</th>\n",
" <th>RegistrarAccount - Country</th>\n",
" <th>Product - Asset Type</th>\n",
" <th>Product - Strategy</th>\n",
" <th>Product - Legal Status</th>\n",
" <th>Product - Is Dedie ?</th>\n",
" <th>Product - Fund</th>\n",
" <th>Product - Shareclass Type</th>\n",
" <th>Product - Shareclass Currency</th>\n",
" <th>Product - Isin</th>\n",
" <th>Centralisation Date</th>\n",
" <th>Quantity - AUM</th>\n",
" <th>Value - AUM CCY</th>\n",
" <th>Value - AUM €</th>\n",
" <th>account_clustered</th>\n",
" <th>Account_Clustered</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2015-03-31</td>\n",
" <td>35.368</td>\n",
" <td>2.464867e+04</td>\n",
" <td>2.464867e+04</td>\n",
" <td>200000647</td>\n",
" <td>200000647</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2015-11-30</td>\n",
" <td>35.368</td>\n",
" <td>2.241306e+04</td>\n",
" <td>2.241306e+04</td>\n",
" <td>200000647</td>\n",
" <td>200000647</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2015-12-31</td>\n",
" <td>35.368</td>\n",
" <td>2.205124e+04</td>\n",
" <td>2.205124e+04</td>\n",
" <td>200000647</td>\n",
" <td>200000647</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2016-03-31</td>\n",
" <td>35.368</td>\n",
" <td>2.162612e+04</td>\n",
" <td>2.162612e+04</td>\n",
" <td>200000647</td>\n",
" <td>200000647</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2016-11-30</td>\n",
" <td>35.368</td>\n",
" <td>2.248945e+04</td>\n",
" <td>2.248945e+04</td>\n",
" <td>200000647</td>\n",
" <td>200000647</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4880292</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Switzerland</td>\n",
" <td>Switzerland</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>SICAV</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Portfolio Sécurité</td>\n",
" <td>AW &amp; AW-R</td>\n",
" <td>EUR</td>\n",
" <td>LU1299306321</td>\n",
" <td>2020-02-29</td>\n",
" <td>26801.000</td>\n",
" <td>2.740670e+06</td>\n",
" <td>2.740670e+06</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4880293</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Switzerland</td>\n",
" <td>Switzerland</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>SICAV</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Portfolio Sécurité</td>\n",
" <td>AW &amp; AW-R</td>\n",
" <td>EUR</td>\n",
" <td>LU1299306321</td>\n",
" <td>2020-06-30</td>\n",
" <td>3099.000</td>\n",
" <td>3.122862e+05</td>\n",
" <td>3.122862e+05</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4880294</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Switzerland</td>\n",
" <td>Switzerland</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>SICAV</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Portfolio Sécurité</td>\n",
" <td>AW &amp; AW-R</td>\n",
" <td>EUR</td>\n",
" <td>LU1299306321</td>\n",
" <td>2020-10-31</td>\n",
" <td>3099.000</td>\n",
" <td>3.184222e+05</td>\n",
" <td>3.184222e+05</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4880295</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Switzerland</td>\n",
" <td>Switzerland</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>SICAV</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Portfolio Sécurité</td>\n",
" <td>AW &amp; AW-R</td>\n",
" <td>EUR</td>\n",
" <td>LU1299306321</td>\n",
" <td>2021-07-31</td>\n",
" <td>2835.000</td>\n",
" <td>2.976183e+05</td>\n",
" <td>2.976183e+05</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4880296</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Switzerland</td>\n",
" <td>Switzerland</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>SICAV</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Portfolio Sécurité</td>\n",
" <td>FW &amp; FW-R</td>\n",
" <td>EUR</td>\n",
" <td>LU1792391911</td>\n",
" <td>2020-07-31</td>\n",
" <td>2916.394</td>\n",
" <td>2.874106e+05</td>\n",
" <td>2.874106e+05</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>4880297 rows × 20 columns</p>\n",
"</div>"
],
"text/plain": [
" Agreement - Code Company - Id Company - Ultimate Parent Id \\\n",
"0 003 166 166 \n",
"1 003 166 166 \n",
"2 003 166 166 \n",
"3 003 166 166 \n",
"4 003 166 166 \n",
"... ... ... ... \n",
"4880292 Private Client Private Client Private Client \n",
"4880293 Private Client Private Client Private Client \n",
"4880294 Private Client Private Client Private Client \n",
"4880295 Private Client Private Client Private Client \n",
"4880296 Private Client Private Client Private Client \n",
"\n",
" Registrar Account - ID Registrar Account - Region \\\n",
"0 200000647 France \n",
"1 200000647 France \n",
"2 200000647 France \n",
"3 200000647 France \n",
"4 200000647 France \n",
"... ... ... \n",
"4880292 Private Client Switzerland \n",
"4880293 Private Client Switzerland \n",
"4880294 Private Client Switzerland \n",
"4880295 Private Client Switzerland \n",
"4880296 Private Client Switzerland \n",
"\n",
" RegistrarAccount - Country Product - Asset Type Product - Strategy \\\n",
"0 France Diversified Patrimoine \n",
"1 France Diversified Patrimoine \n",
"2 France Diversified Patrimoine \n",
"3 France Diversified Patrimoine \n",
"4 France Diversified Patrimoine \n",
"... ... ... ... \n",
"4880292 Switzerland Fixed Income Sécurité \n",
"4880293 Switzerland Fixed Income Sécurité \n",
"4880294 Switzerland Fixed Income Sécurité \n",
"4880295 Switzerland Fixed Income Sécurité \n",
"4880296 Switzerland Fixed Income Sécurité \n",
"\n",
" Product - Legal Status Product - Is Dedie ? \\\n",
"0 FCP NO \n",
"1 FCP NO \n",
"2 FCP NO \n",
"3 FCP NO \n",
"4 FCP NO \n",
"... ... ... \n",
"4880292 SICAV NO \n",
"4880293 SICAV NO \n",
"4880294 SICAV NO \n",
"4880295 SICAV NO \n",
"4880296 SICAV NO \n",
"\n",
" Product - Fund Product - Shareclass Type \\\n",
"0 Carmignac Patrimoine A \n",
"1 Carmignac Patrimoine A \n",
"2 Carmignac Patrimoine A \n",
"3 Carmignac Patrimoine A \n",
"4 Carmignac Patrimoine A \n",
"... ... ... \n",
"4880292 Carmignac Portfolio Sécurité AW & AW-R \n",
"4880293 Carmignac Portfolio Sécurité AW & AW-R \n",
"4880294 Carmignac Portfolio Sécurité AW & AW-R \n",
"4880295 Carmignac Portfolio Sécurité AW & AW-R \n",
"4880296 Carmignac Portfolio Sécurité FW & FW-R \n",
"\n",
" Product - Shareclass Currency Product - Isin Centralisation Date \\\n",
"0 EUR FR0010135103 2015-03-31 \n",
"1 EUR FR0010135103 2015-11-30 \n",
"2 EUR FR0010135103 2015-12-31 \n",
"3 EUR FR0010135103 2016-03-31 \n",
"4 EUR FR0010135103 2016-11-30 \n",
"... ... ... ... \n",
"4880292 EUR LU1299306321 2020-02-29 \n",
"4880293 EUR LU1299306321 2020-06-30 \n",
"4880294 EUR LU1299306321 2020-10-31 \n",
"4880295 EUR LU1299306321 2021-07-31 \n",
"4880296 EUR LU1792391911 2020-07-31 \n",
"\n",
" Quantity - AUM Value - AUM CCY Value - AUM € account_clustered \\\n",
"0 35.368 2.464867e+04 2.464867e+04 200000647 \n",
"1 35.368 2.241306e+04 2.241306e+04 200000647 \n",
"2 35.368 2.205124e+04 2.205124e+04 200000647 \n",
"3 35.368 2.162612e+04 2.162612e+04 200000647 \n",
"4 35.368 2.248945e+04 2.248945e+04 200000647 \n",
"... ... ... ... ... \n",
"4880292 26801.000 2.740670e+06 2.740670e+06 Private Client \n",
"4880293 3099.000 3.122862e+05 3.122862e+05 Private Client \n",
"4880294 3099.000 3.184222e+05 3.184222e+05 Private Client \n",
"4880295 2835.000 2.976183e+05 2.976183e+05 Private Client \n",
"4880296 2916.394 2.874106e+05 2.874106e+05 Private Client \n",
"\n",
" Account_Clustered \n",
"0 200000647 \n",
"1 200000647 \n",
"2 200000647 \n",
"3 200000647 \n",
"4 200000647 \n",
"... ... \n",
"4880292 Private Client \n",
"4880293 Private Client \n",
"4880294 Private Client \n",
"4880295 Private Client \n",
"4880296 Private Client \n",
"\n",
"[4880297 rows x 20 columns]"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Trier les connexions par date décroissante : plus récentes en premier\n",
"rupture_sorted = rupture_filtered.sort_values('date', ascending=False)\n",
"\n",
"# fusion des connexions\n",
"df['Account_Clustered'] = df['Registrar Account - ID']\n",
"\n",
"# Pour chaque connexion\n",
"for _, row in rupture_sorted.iterrows():\n",
" old = row['old_account']\n",
" new = row['new_account']\n",
" df.loc[df['Account_Clustered'] == new, 'Account_Clustered'] = old\n",
"\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "27f12c31-08e1-4384-9129-4679d6ebe0ca",
"metadata": {},
"outputs": [],
"source": [
"def evolution_compte(df, id1, id = 'Registrar Account - ID'):\n",
" def prepare_df(idt):\n",
" df_id = df[df[id] == idt].copy()\n",
" df_id['Centralisation Date'] = pd.to_datetime(df_id['Centralisation Date'])\n",
" df_agg = (\n",
" df_id\n",
" .groupby('Centralisation Date')['Quantity - AUM']\n",
" .sum()\n",
" .reset_index()\n",
" .sort_values('Centralisation Date')\n",
" )\n",
" return df_agg\n",
"\n",
" df1 = prepare_df(id1)\n",
"\n",
" plt.figure(figsize=(12, 6))\n",
"\n",
" # Courbe du compte\n",
" plt.plot(df1['Centralisation Date'], df1['Quantity - AUM'],\n",
" marker='.', linestyle='-', label=f'Account {id1}')\n",
"\n",
" plt.title(f\"Évolution AUM pour le compte {id1}\")\n",
" plt.xlabel(\"Date\")\n",
" plt.ylabel(\"Quantity - AUM\")\n",
" plt.grid(True)\n",
" plt.legend()\n",
" plt.tight_layout()\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "4b952bc5-e823-4276-8066-65dfa5839047",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAksdJREFUeJzs3XlYVGX/x/HPMMAMyCIugCvivq+pkeVSJi4tppm2mJn1lGml/jLTStN60sceK0vLFtOeylJbrNRM0tRKyyU1l1zT3EDcAJEdzu8PnMkRkBkcHJD367q4knPuOfOdmVvDj9/7PibDMAwBAAAAAAAAV5CXpwsAAAAAAABA2UMoBQAAAAAAgCuOUAoAAAAAAABXHKEUAAAAAAAArjhCKQAAAAAAAFxxhFIAAAAAAAC44gilAAAAAAAAcMURSgEAAAAAAOCKI5QCAMBDNm/erJdeeklnz571dCkAAADAFUcoBQCABxw/fly33XabwsPDFRgY6OlyAAAAgCvOZBiG4ekiAAAoa5YuXarExETdfffdni4FAAAA8Ag6pQAA8ICePXte0UDKZDLphRdecOs1586dK5PJpIMHD7r1uvAcPlMAAHAlEUoBAHCF2P7CX9DXr7/+6ukS8/Xyyy9r0aJFni4jX9nZ2apatapMJpO+++67fMc88MADCggIKPAaAQEBeuCBB+zfr1q1yv6ZfPzxx/k+pkOHDjKZTGratOll1Y+SaefOnXrhhReKPZz75JNPZDKZCpyff/75p7p3766AgABVqFBBAwcO1IkTJ/Idu3//ft1zzz0KDQ2Vn5+f6tWrp2effdZhzPr16/XYY4+pTZs28vHxkclkumR9x48f1yOPPKJq1arJarWqVq1aGjJkSJ5xn332mVq3bi2r1arKlStryJAhOnnypJPvAgCgLPP2dAEAAJQ1kyZNUmRkZJ7jdevW9UA1hXv55Zd15513qnfv3g7HBw4cqAEDBshisXimMEkrV65UbGysatWqpU8++UQ9evRw27WtVqvmzZun++67z+H4wYMHtXbtWlmtVrc9F0qWnTt3auLEiercubNq1apVLM+RnJysp59+WuXKlcv3/JEjR9SxY0cFBwfr5ZdfVnJysv773/9q27ZtWr9+vXx9fe1jt2zZos6dO6tatWr6v//7P1WsWFGHDh3S4cOHHa65dOlSvf/++2revLlq166tPXv2FFjf4cOH1aFDB0nSo48+qmrVqunYsWNav369w7i3335bjz32mG666Sa9+uqrOnLkiKZPn66NGzfqt99+4/cJAOCSCKUAALjCevTooWuuucbTZVw2s9kss9ns0Ro+/vhjtW7dWoMGDdK4ceN07ty5Av+S76qePXvqm2++0cmTJ1WpUiX78Xnz5iksLEz16tXTmTNn3PJcV5I73yMU3UsvvaTAwEB16dIl307El19+WefOndOmTZtUs2ZNSVK7du108803a+7cufrXv/4lScrJydHAgQPVsGFD/fjjj/Lz8yvwOYcOHaoxY8bIz89Pw4cPv2Qo9cgjj8jb21sbNmxQxYoV8x2TkZGhcePGqWPHjoqJibF3Xl133XW69dZb9d577+nxxx939i0BAJRBLN8DAKAEyczMVIUKFTR48OA855KSkmS1WvXUU0/Zj8XHx2vIkCEKCwuT1WpVixYt9OGHHxb6PA888EC+HSAvvPCCw5Iek8mkc+fO6cMPP7QvabMtdSto/6G33npLTZo0kcViUdWqVTVs2DAlJCQ4jOncubOaNm2qnTt3qkuXLvL391e1atU0derUQmu3SU1N1VdffaUBAwborrvuUmpqqr7++munH1+Y22+/XRaLRQsXLnQ4Pm/ePN11111OB3K217pp0yZdd9118vPzU2RkpGbNmpVnrDOfp2154apVqxyOHzx4UCaTSXPnzrUfsy1d3L9/v3r27KnAwEDde++9zr0BF/juu+90ww03qFy5cgoMDFSvXr20Y8cOpx6bkJCgkSNHqlatWrJYLKpevbruv/9+h+Vdzrxu2+v773//q5kzZ6p27dry9/dXt27ddPjwYRmGoRdffFHVq1eXn5+fbr/9dp0+fdrhGrVq1dItt9yi5cuXq2XLlrJarWrcuLG+/PJL+5i5c+eqX79+kqQuXbrY5/2F7/flvB+StHfvXr322mt69dVX5e2d/78Rf/HFF7rlllvsgZQkde3aVfXr19eCBQvsx5YvX67t27drwoQJ8vPzU0pKirKzs/O9ZlhY2CVDK5tdu3bpu+++0+jRo1WxYkWlpaUpMzMzz7jt27crISFB/fv3d/hz45ZbblFAQIA+++yzQp8LAFC2EUoBAHCFJSYm6uTJkw5fp06dkiT5+Pjojjvu0KJFi5SRkeHwuEWLFik9PV0DBgyQlBvKdO7cWR999JHuvfdevfLKKwoODtYDDzyg6dOnu6XWjz76SBaLRTfccIM++ugjffTRR3rkkUcKHP/CCy9o2LBhqlq1qqZNm6a+ffvqnXfeUbdu3fL8pfbMmTPq3r27WrRooWnTpqlhw4YaM2ZMgXtDXeybb75RcnKyBgwYoPDwcHXu3FmffPLJZb3eC/n7++v222/Xp59+aj+2detW7dixQ/fcc49L1zpz5ox69uypNm3aaOrUqapevbqGDh2qDz74wD6muD7PrKwsRUdHKzQ0VP/973/Vt29flx7/0UcfqVevXgoICNB//vMfPf/889q5c6euv/76QvdcSk5O1g033KA333xT3bp10/Tp0/Xoo49q165dOnLkiCTXX/cnn3yit956S48//rj+7//+T6tXr9Zdd92l5557TsuWLdOYMWP0r3/9S99++61DgGuzd+9e9e/fXz169NDkyZPl7e2tfv36KSYmRpLUsWNHPfHEE5KkcePG2ed9o0aNLvv9sBkxYoS6dOminj175nv+6NGjio+Pz7ejsl27dtq8ebP9+x9++EGSZLFYdM0116hcuXLy9/fXgAED8oRyzrJdMywsTDfddJP8/Pzk5+enHj16OLzG9PR0Sco36PLz89PmzZuVk5NTpBoAAGWEAQAArog5c+YYkvL9slgs9nHff/+9Icn49ttvHR7fs2dPo3bt2vbvX3/9dUOS8fHHH9uPZWRkGFFRUUZAQICRlJRkPy7JmDBhgv37QYMGGREREXlqnDBhgnHxjwflypUzBg0aVODrOXDggGEYhhEfH2/4+voa3bp1M7Kzs+3jZsyYYUgyPvjgA/uxTp06GZKM//3vf/Zj6enpRnh4uNG3b988z5WfW265xejQoYP9+3fffdfw9vY24uPjHcYNGjTIKFeuXIHXufj1/fjjj4YkY+HChcbixYsNk8lkHDp0yDAMwxg9erT9M+jUqZPRpEmTQuu0vdZp06Y5vNaWLVsaoaGhRkZGhmEYzn+etvp+/PFHh+c5cOCAIcmYM2eOw2uXZDzzzDOF1mkYeT/Ts2fPGuXLlzcefvhhh3FxcXFGcHBwnuMXGz9+vCHJ+PLLL/Ocy8nJcel1215f5cqVjYSEBPvYsWPHGpKMFi1aGJmZmfbjd999t+Hr62ukpaXZj0VERBiSjC+++MJ+LDEx0ahSpYrRqlUr+7GFCxfm+x5f7vthGIaxePFiw9vb29ixY4dhGPnPzw0bNuT5/WEzevRoQ5L9dd12222GJKNixYrGvffea3z++efG888/b3h7exvXXXed/X2+2LBhw/L8Xrd54okn7Nfs3r27MX/+fOOVV14xAgICjDp16hjnzp0zDMMwTpw4YZhMJmPIkCEOj9+1a5f9z7aTJ08W+p4AAMouOqUAALjCZs6cqZiYGIevC7uDbrzxRlWqVEnz58+3Hztz5oxiYmLUv39/+7GlS5cqPDxcd999t/2Yj4+PnnjiCSUnJ2v16tVX5gWd98MPPygjI0MjRoyQl9c/P2I8/PDDCgoK0pIlSxzGBwQEOGwi7uvrq3bt2umvv/4q9LlOnTql77//3uG19+3bVyaTyWFp0+Xq1q2bKlSooM8++0yGYeizzz5zeE5neXt7O3SY+fr66pFHHlF8fLw2bdokqXg/z6FDhxbpcTExMUpISNDdd9/t0Nl
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"evolution_compte(df, '406169')"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "ce811c95-698d-467a-b63a-6e798cd1c02b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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8ccf68EHH9Rrr70mLy8vPfLII5o1a1ap1Prxxx/LyclJN998sz7++GN9/PHHevzxxy/Z/8UXX9Tw4cNVr149TZ8+XX379tW7776rHj16FPpL7ZkzZ9SzZ0+1bt1a06dPV7NmzTRmzJhL7g11se+++07nzp1T//795evrq65du+rTTz+9pvd7IVdXV91999367LPPLG2//fab9uzZowceeKBE1zpz5ox69eql0NBQTZs2TQ0aNNCwYcP0wQcfWPqU1fczNzdXERER8vHx0euvv66+ffuW6PyPP/5YkZGRcnd313/+8x+98MIL2rt3r2666aYr7rl07tw53XzzzXrrrbfUo0cPzZo1S0OHDtW+fft07NgxSSV/359++qnefvttPfnkk/q///s/rVu3Tv369dP48eP1448/asyYMfrXv/6l77//3irALXDw4EFFRUXp9ttv15QpU2Rvb6/77rtP0dHRkqTOnTvrqaeekiSNGzfOMu6bN29+zZ9HgWeeeUbdunVTr169ijx+/PhxJSUlFTmjskOHDtq+fbvl9U8//SRJcnJyUvv27eXm5iZXV1f179+/UChXXAXXrFu3rm699Va5uLjIxcVFt99+u9V7zMrKkqQigy4XFxdt375d+fn5V1UDAKCaMAAAQLmYP3++IanILycnJ0u/FStWGJKM77//3ur8Xr16Gdddd53l9cyZMw1JxieffGJpy87ONsLDww13d3cjNTXV0i7JmDhxouX1wIEDjcDAwEI1Tpw40bj4jwdubm7GwIEDL/l+YmNjDcMwjKSkJMPR0dHo0aOHkZeXZ+k3e/ZsQ5LxwQcfWNq6dOliSDI++ugjS1tWVpbh6+tr9O3bt9C9inLHHXcYnTp1srz+73//a9jb2xtJSUlW/QYOHGi4ubld8joXv781a9YYkozFixcbS5cuNUwmkxEfH28YhmGMHj3a8j3o0qWLcf3111+xzoL3On36dKv32qZNG8PHx8fIzs42DKP438+C+tasWWN1n9jYWEOSMX/+fKv3Lsl47rnnrlinYRT+nv71119GjRo1jCFDhlj1S0xMNLy8vAq1X2zChAmGJGPJkiWFjuXn55fofRe8vzp16hhnz5619B07dqwhyWjdurWRk5Njab///vsNR0dHIzMz09IWGBhoSDK++uorS1tKSorh5+dntG3b1tK2ePHiIj/ja/08DMMwli5datjb2xt79uwxDKPo8bl58+ZCvz8KjB492pBkeV933XWXIcmoXbu28eCDDxpffvml8cILLxj29vbGjTfeaPmcLzZ8+PBCv9cLPPXUU5Zr9uzZ01i0aJHx2muvGe7u7kbDhg2NtLQ0wzAM49SpU4bJZDIeffRRq/P37dtn+dmWnJx8xc8EAFB9MVMKAIByNmfOHEVHR1t9XTg76JZbbpG3t7cWLVpkaTtz5oyio6MVFRVlaVu+fLl8fX11//33W9ocHBz01FNP6dy5c1q3bl35vKG//fTTT8rOztYzzzwjO7t//ogxZMgQeXp6atmyZVb93d3drTYRd3R0VIcOHfTHH39c8V5//vmnVqxYYfXe+/btK5PJZLW06Vr16NFDtWrV0ueffy7DMPT5559b3bO47O3trWaYOTo66vHHH1dSUpK2bt0qqWy/n8OGDbuq86Kjo3X27Fndf//9VjP7zGa
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"evolution_compte(df, '406169', id = 'Account_Clustered')"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "d507fb4c-4de5-481f-9cd0-1432298564b8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Agreement - Code</th>\n",
" <th>Company - Id</th>\n",
" <th>Company - Ultimate Parent Id</th>\n",
" <th>Registrar Account - ID</th>\n",
" <th>Registrar Account - Region</th>\n",
" <th>RegistrarAccount - Country</th>\n",
" <th>Product - Asset Type</th>\n",
" <th>Product - Strategy</th>\n",
" <th>Product - Legal Status</th>\n",
" <th>Product - Is Dedie ?</th>\n",
" <th>...</th>\n",
" <th>Quantity - Subscription</th>\n",
" <th>Quantity - Redemption</th>\n",
" <th>Quantity - NetFlows</th>\n",
" <th>Value Ccy - Subscription</th>\n",
" <th>Value Ccy - Redemption</th>\n",
" <th>Value Ccy - NetFlows</th>\n",
" <th>Value € - Subscription</th>\n",
" <th>Value € - Redemption</th>\n",
" <th>Value € - NetFlows</th>\n",
" <th>Account_Clustered</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200127202</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Equity</td>\n",
" <td>Investissement</td>\n",
" <td>SICAV</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>1636.000</td>\n",
" <td>0.000</td>\n",
" <td>1636.000</td>\n",
" <td>280983.00</td>\n",
" <td>0.00</td>\n",
" <td>280983.00</td>\n",
" <td>280983.00</td>\n",
" <td>0.00</td>\n",
" <td>280983.00</td>\n",
" <td>406533</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>406533</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>144.690</td>\n",
" <td>0.000</td>\n",
" <td>144.690</td>\n",
" <td>99985.13</td>\n",
" <td>0.00</td>\n",
" <td>99985.13</td>\n",
" <td>99985.13</td>\n",
" <td>0.00</td>\n",
" <td>99985.13</td>\n",
" <td>406533</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>406533</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Equity</td>\n",
" <td>Investissement</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>0.000</td>\n",
" <td>-8.321</td>\n",
" <td>-8.321</td>\n",
" <td>0.00</td>\n",
" <td>-9384.76</td>\n",
" <td>-9384.76</td>\n",
" <td>0.00</td>\n",
" <td>-9384.76</td>\n",
" <td>-9384.76</td>\n",
" <td>406533</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>406533</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Equity</td>\n",
" <td>Investissement</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>0.000</td>\n",
" <td>-22.083</td>\n",
" <td>-22.083</td>\n",
" <td>0.00</td>\n",
" <td>-25227.40</td>\n",
" <td>-25227.40</td>\n",
" <td>0.00</td>\n",
" <td>-25227.40</td>\n",
" <td>-25227.40</td>\n",
" <td>406533</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>406533</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Equity</td>\n",
" <td>Investissement</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>0.000</td>\n",
" <td>-465.992</td>\n",
" <td>-465.992</td>\n",
" <td>0.00</td>\n",
" <td>-563775.76</td>\n",
" <td>-563775.76</td>\n",
" <td>0.00</td>\n",
" <td>-563775.76</td>\n",
" <td>-563775.76</td>\n",
" <td>406533</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2574456</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Luxembourg</td>\n",
" <td>Luxembourg</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>0.000</td>\n",
" <td>-20.000</td>\n",
" <td>-20.000</td>\n",
" <td>0.00</td>\n",
" <td>-34294.40</td>\n",
" <td>-34294.40</td>\n",
" <td>0.00</td>\n",
" <td>-34294.40</td>\n",
" <td>-34294.40</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2574457</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Luxembourg</td>\n",
" <td>Luxembourg</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>328.726</td>\n",
" <td>0.000</td>\n",
" <td>328.726</td>\n",
" <td>564028.07</td>\n",
" <td>0.00</td>\n",
" <td>564028.07</td>\n",
" <td>564028.07</td>\n",
" <td>0.00</td>\n",
" <td>564028.07</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2574458</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Luxembourg</td>\n",
" <td>Luxembourg</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>4.443</td>\n",
" <td>0.000</td>\n",
" <td>4.443</td>\n",
" <td>7603.66</td>\n",
" <td>0.00</td>\n",
" <td>7603.66</td>\n",
" <td>7603.66</td>\n",
" <td>0.00</td>\n",
" <td>7603.66</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2574459</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Luxembourg</td>\n",
" <td>Luxembourg</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>0.000</td>\n",
" <td>-440.000</td>\n",
" <td>-440.000</td>\n",
" <td>0.00</td>\n",
" <td>-754696.80</td>\n",
" <td>-754696.80</td>\n",
" <td>0.00</td>\n",
" <td>-754696.80</td>\n",
" <td>-754696.80</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2574460</th>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Private Client</td>\n",
" <td>Luxembourg</td>\n",
" <td>Luxembourg</td>\n",
" <td>Fixed Income</td>\n",
" <td>Sécurité</td>\n",
" <td>SICAV</td>\n",
" <td>NO</td>\n",
" <td>...</td>\n",
" <td>3595.000</td>\n",
" <td>0.000</td>\n",
" <td>3595.000</td>\n",
" <td>358385.55</td>\n",
" <td>0.00</td>\n",
" <td>358385.55</td>\n",
" <td>358385.55</td>\n",
" <td>0.00</td>\n",
" <td>358385.55</td>\n",
" <td>Private Client</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2574461 rows × 25 columns</p>\n",
"</div>"
],
"text/plain": [
" Agreement - Code Company - Id Company - Ultimate Parent Id \\\n",
"0 003 166 166 \n",
"1 003 166 166 \n",
"2 003 166 166 \n",
"3 003 166 166 \n",
"4 003 166 166 \n",
"... ... ... ... \n",
"2574456 Private Client Private Client Private Client \n",
"2574457 Private Client Private Client Private Client \n",
"2574458 Private Client Private Client Private Client \n",
"2574459 Private Client Private Client Private Client \n",
"2574460 Private Client Private Client Private Client \n",
"\n",
" Registrar Account - ID Registrar Account - Region \\\n",
"0 200127202 France \n",
"1 406533 France \n",
"2 406533 France \n",
"3 406533 France \n",
"4 406533 France \n",
"... ... ... \n",
"2574456 Private Client Luxembourg \n",
"2574457 Private Client Luxembourg \n",
"2574458 Private Client Luxembourg \n",
"2574459 Private Client Luxembourg \n",
"2574460 Private Client Luxembourg \n",
"\n",
" RegistrarAccount - Country Product - Asset Type Product - Strategy \\\n",
"0 France Equity Investissement \n",
"1 France Diversified Patrimoine \n",
"2 France Equity Investissement \n",
"3 France Equity Investissement \n",
"4 France Equity Investissement \n",
"... ... ... ... \n",
"2574456 Luxembourg Fixed Income Sécurité \n",
"2574457 Luxembourg Fixed Income Sécurité \n",
"2574458 Luxembourg Fixed Income Sécurité \n",
"2574459 Luxembourg Fixed Income Sécurité \n",
"2574460 Luxembourg Fixed Income Sécurité \n",
"\n",
" Product - Legal Status Product - Is Dedie ? ... \\\n",
"0 SICAV NO ... \n",
"1 FCP NO ... \n",
"2 FCP NO ... \n",
"3 FCP NO ... \n",
"4 FCP NO ... \n",
"... ... ... ... \n",
"2574456 FCP NO ... \n",
"2574457 FCP NO ... \n",
"2574458 FCP NO ... \n",
"2574459 FCP NO ... \n",
"2574460 SICAV NO ... \n",
"\n",
" Quantity - Subscription Quantity - Redemption Quantity - NetFlows \\\n",
"0 1636.000 0.000 1636.000 \n",
"1 144.690 0.000 144.690 \n",
"2 0.000 -8.321 -8.321 \n",
"3 0.000 -22.083 -22.083 \n",
"4 0.000 -465.992 -465.992 \n",
"... ... ... ... \n",
"2574456 0.000 -20.000 -20.000 \n",
"2574457 328.726 0.000 328.726 \n",
"2574458 4.443 0.000 4.443 \n",
"2574459 0.000 -440.000 -440.000 \n",
"2574460 3595.000 0.000 3595.000 \n",
"\n",
" Value Ccy - Subscription Value Ccy - Redemption Value Ccy - NetFlows \\\n",
"0 280983.00 0.00 280983.00 \n",
"1 99985.13 0.00 99985.13 \n",
"2 0.00 -9384.76 -9384.76 \n",
"3 0.00 -25227.40 -25227.40 \n",
"4 0.00 -563775.76 -563775.76 \n",
"... ... ... ... \n",
"2574456 0.00 -34294.40 -34294.40 \n",
"2574457 564028.07 0.00 564028.07 \n",
"2574458 7603.66 0.00 7603.66 \n",
"2574459 0.00 -754696.80 -754696.80 \n",
"2574460 358385.55 0.00 358385.55 \n",
"\n",
" Value € - Subscription Value € - Redemption Value € - NetFlows \\\n",
"0 280983.00 0.00 280983.00 \n",
"1 99985.13 0.00 99985.13 \n",
"2 0.00 -9384.76 -9384.76 \n",
"3 0.00 -25227.40 -25227.40 \n",
"4 0.00 -563775.76 -563775.76 \n",
"... ... ... ... \n",
"2574456 0.00 -34294.40 -34294.40 \n",
"2574457 564028.07 0.00 564028.07 \n",
"2574458 7603.66 0.00 7603.66 \n",
"2574459 0.00 -754696.80 -754696.80 \n",
"2574460 358385.55 0.00 358385.55 \n",
"\n",
" Account_Clustered \n",
"0 406533 \n",
"1 406533 \n",
"2 406533 \n",
"3 406533 \n",
"4 406533 \n",
"... ... \n",
"2574456 Private Client \n",
"2574457 Private Client \n",
"2574458 Private Client \n",
"2574459 Private Client \n",
"2574460 Private Client \n",
"\n",
"[2574461 rows x 25 columns]"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Flux\n",
"\n",
"# fusion des connexions\n",
"dg['Account_Clustered'] = dg['Registrar Account - ID']\n",
"\n",
"# Pour chaque connexion\n",
"for _, row in rupture_sorted.iterrows():\n",
" old = row['old_account']\n",
" new = row['new_account']\n",
" dg.loc[dg['Account_Clustered'] == new, 'Account_Clustered'] = old\n",
"\n",
"dg"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}