我有一個帶有wallet
列的 df (我想將其用作索引和positions_rewards
列,這是這個問題的主要目標。
中的每一行positions_rewards
都是一個字典串列(每行在其串列中都有不同數量的字典)。
我想創建一個multiindex df
withwallet
作為index
,列keys
在所有字典(position
和position_rewards
)之間共享。
基本上每個錢包都有很多倉位,每個倉位對應的倉位獎勵。
wallet amount positions_rewards
0 0x00000000000000000000 0 [{'position': 'LUSD', 'position_rewards': '0'}, {'position': 'ALCX', 'position_rewards': '1000'}]
1 0x000566b53e028d21e104 719082156191632 [{'position': 'LUSD', 'position_rewards': '0'}, {'position': 'ALCX', 'position_rewards': '420'}]
2 0xb72ca7ee0aa8ad85a4ff 4656542682597557130970 [{'position': 'SUSHI_LP', 'position_rewards': 1200}]
3 0x81f01fed84a5bb03813a 777565117641038730248 [{'position': 'SUSHI_LP', 'position_rewards': 300}, {'position': 'UNI_LP', 'position_rewards': 30000}]
4 0x3726a511f7ff6a417e05 1566258882202552609066 [{'position': 'ALCX', 'position_rewards': 2000}]
我的代碼如下(只是DataFrame
嵌套字典串列的一個簡單構造(因此該position_rewards
列是唯一仍然具有“未分解”值的列):
df = pd.DataFrame(rewards_list)
筆記:
- 忽略
amount
列。 DataFrame
使用重復行創建一個更好的主意wallet
,然后將其設定為索引(或不設定)以便能夠執行groupby()
操作?我現在的偏好是多索引,因為我將在該錢包索引上附加其他資料。所以我不想有重復的wallet
行,因為它會更難合并dfs
而不是合并df
具有唯一索引的 a 。
uj5u.com熱心網友回復:
嘗試:
df = df.drop(columns="amount").explode("positions_rewards")
df = pd.concat([df, df.pop("positions_rewards").apply(pd.Series)], axis=1)
print(df)
印刷:
wallet position position_rewards
0 0x00000000000000000000 LUSD 0
0 0x00000000000000000000 ALCX 1000
1 0x000566b53e028d21e104 LUSD 0
1 0x000566b53e028d21e104 ALCX 420
2 0xb72ca7ee0aa8ad85a4ff SUSHI_LP 1200
3 0x81f01fed84a5bb03813a SUSHI_LP 300
3 0x81f01fed84a5bb03813a UNI_LP 30000
4 0x3726a511f7ff6a417e05 ALCX 2000
如果我理解正確,您可以df.pivot
稍后使用來獲取您的資料框:
print(
df.pivot(
index="wallet",
columns="position",
values="position_rewards",
).fillna(0)
)
印刷:
position ALCX LUSD SUSHI_LP UNI_LP
wallet
0x00000000000000000000 1000 0 0 0
0x000566b53e028d21e104 420 0 0 0
0x3726a511f7ff6a417e05 2000 0 0 0
0x81f01fed84a5bb03813a 0 0 300 30000
0xb72ca7ee0aa8ad85a4ff 0 0 1200 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/504896.html
上一篇:百分比變化計算器無法多次作業