我执行以下操作:
output = (df_pointer
.add(df1_pointer.dropna(how='all').sum(axis=1)
.groupby(level=0).sum()
.rename(str(trigger)).to_frame(), fill_value=0))
df_pointer
是一个大容器,最初充满零,但密度越来越大。
df1_pointer
是一个非常稀疏的多索引数据帧(具有两个级别),充满了nan
和零。
我需要同时对各列求和,然后对1级索引(称为“层”)求和。
我知道很少有特殊之处。
对于0级索引的每个键(“实体”),我在“层”索引中正好有8个观察值:
Column 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Entity Layer
1 1 1 NaN 0.0 0.0 NaN NaN 0.0 0.0 NaN NaN NaN 0.0 NaN 0.0 0.0 72.0
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0
3 NaN 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN 0.0 NaN NaN 0.0 NaN NaN NaN NaN NaN NaN 0.0 NaN 19.5
5 NaN NaN NaN NaN 1.32435 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
....
我尝试过:
output = (df_pointer
.add(df1_pointer.dropna(how='all').sum(axis=1)
.groupby('Entity').sum()
.rename(str(trigger)).to_frame(), fill_value=0))
6.8 ms ± 829 µs per loop (mean ± standard deviation of 20 runs, 100 loops each)
output2 = (df_pointer
.add(df1_pointer.dropna(how='all').sum(axis=1)
.groupby(level=0).sum()
.rename(str(trigger)).to_frame(), fill_value=0))
7.71 ms ± 518 µs per loop (mean ± standard deviation of 20 runs, 100 loops each)
output2 = (df_pointer
.add(df1_pointer[df1_pointer!=0].dropna(how='all').sum(axis=1)
.groupby('Entity').sum()
.rename(str(trigger)).to_frame(), fill_value=0))
7.96 ms ± 429 µs per loop (mean ± standard deviation of 20 runs, 100 loops each)
output3 = (df_pointer
.add(df1_pointer[df1_pointer!=0].dropna(how='all').sum(axis=1)
.unstack('Layer').sum(axis=1)
.rename(str(trigger)).to_frame(), fill_value=0))
9.26 ms ± 2.54 ms per loop (mean ± std. dev. of 20 runs, 10 loops each)
trigger
只是特定迭代的列名。
有时是数字列表,有时只是数字。在此示例中,它来自以下列名称列表:trigger_list=list(range(1,16))