我有一个 networkx 图的图,其中边颜色取决于使用以下代码(使用a_netwnx.Graph)分配给各个边的权重:
a_netw_edges = a_netw.edges()
a_netw_weights = [a_netw[source][dest]['weight'] for source, dest in a_netw_edges]
a_netw_colors = [plt.cm.Blues(weight*15) for weight in a_netw_weights]
nx.draw_networkx(a_netw, edges=a_netw_edges, width=1, edge_color=a_netw_colors)
Run Code Online (Sandbox Code Playgroud)
在这个图中,我想添加一个图例,使权重和颜色之间的联系变得明确;就像在使用pcolor.
虽然我对如何开始有一个粗略的想法:
fig, axes = plt.subplots(nrows=2)
nx.draw_networkx(a_netw, edges=a_netw_edges, width=1, edge_color=a_netw_colors, ax=axes[0])
axes[0].get_xaxis().set_visible(False)
axes[0].get_yaxis().set_visible(False)
gradient = np.linspace(0, 1, 256)
gradient = np.vstack((gradient, gradient))
axes[1].imshow(gradient, aspect=3, cmap=plt.cm.Blues)
axes[1].get_yaxis().set_visible(False)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)
我不知道如何执行以下步骤:
给出如下所示的DataFrame:
import numpy as np
import pandas as pd
from pandas import DataFrame
idx = pd.MultiIndex.from_product([["Project 1", "Project 2"], range(1,3)],
names=['Project', 'Ord'])
df = DataFrame({'a': ["foo", np.nan, np.nan, "bar"],
'b': [np.nan, "one", "two", np.nan]},
index=idx)
Out:
a b
Project Ord
Project 1 1 foo NaN
2 NaN one
Project 2 1 NaN two
2 bar NaN
Run Code Online (Sandbox Code Playgroud)
我想合并具有相同外部索引的行(请注意,在每种情况下,只有一个非nan值)。
我当前使用的解决方案涉及两个分组操作:
df.index = df.index.droplevel(1)
df.groupby(df.index).ffill().groupby(df.index).last()
Run Code Online (Sandbox Code Playgroud)
并给了我预期的结果:
Out:
a b
Project
Project 1 foo one
Project 2 bar two
Run Code Online (Sandbox Code Playgroud)
必须使用两个groupby-operation似乎过多,因为我需要的是一个聚合函数,该函数从列表中返回单个非nan值。但是,我无法想到将dropna用作聚合函数的方法。