Pandas 数据框 (df) groupby 具有使用 df 行和列的用户定义函数

Pandas data frame (df) groupby with user defined function that uses df row and column

我创建了一个存储以下信息的数据框 (df),HS1 是索引。

HS1 HS2 EffNotional_UnMG
EUR 3   -10082.91381
USD 2   -36253.84938
USD 3   78693.86806

现在我想在此数据帧上应用两个迭代:HS1 的外部和 HS2 的内部以获得两个字典(已声明为默认值),如下所示: 对于欧元:{'2': 20000.00,'3':0} [键 3 的默认值为 0] 对于美元:{'2': -36253.84938, '3':78693.86806}

我使用了 itertuple 并获得了外部迭代的以下输出:

for row in df.itertuples():
print (row)

Pandas(Index='EUR', HS2=3, EffNotional_UnMG=-10082.913813053281)

Pandas(Index='USD', HS2=2, EffNotional_UnMG=-36253.849384403635)

Pandas(Index='USD', HS2=3, EffNotional_UnMG=78693.868057473315)

有人可以指导如何使用 itertuples 进行内部迭代吗?

我认为不需要循环,使用pivot + fillna + to_dict:

d = df.pivot('HS2','HS1','EffNotional_UnMG').fillna(0).to_dict()

set_index + unstack + to_dict 的替代解决方案:

d = df.set_index(['HS2','HS1'])['EffNotional_UnMG'].unstack(fill_value=0).to_dict()

print (d)
{'EUR': {'2': 0.0, '3': -10082.91381}, 'USD': {'2': -36253.84938, '3': 78693.86806000001}}