【发布时间】:2019-06-10 20:10:57
【问题描述】:
我有一个带有以下结构的支付的 pandas 数据框:
>> print(df)
id time amount seller buyer
-------------------------------------------------
1 07:01 16.00 Jack Rose
2 07:03 14.00 Alice Bob
3 07:05 95.00 Jim Larry
... ... ... ... ...
9999 18:16 81.00 Rose Alice
我如何从中找到“封闭成员”支付网络?
例如,如果我想找到一个数据子集,其中仅包含 {Rose, Alice, Jim} 彼此之间严格进行的付款,那么以下方法可能有效:
members = ['Rose', 'Alice', 'Jim']
df_subset = df[df.seller.isin(members) & df.buyer.isin(members)]
但是如何检索最大的此类网络?即不仅针对 3 个人,而且针对数据框中的最大可能人数?
我已经尝试过以下变体:
df_subset = df[df.seller.isin(df.buyer.unique())]
df_subset = df_subset[df_subset.buyer.isin(df_subset.seller.unique())]
然而,这并不成功,因为之后df_subset.seller.unique() 和df_subset.buyer.unique() 不一样了。
任何帮助将不胜感激。
我相信最后df_subset.seller.unique()和df_subset.buyer.unique()应该是一样的。
【问题讨论】:
-
这是一个图论问题,您可以使用 networkx 和 subgraphs 方法。如果您添加了具有预期结果的更完整的数据。我相信 Stack Overflow 社区可以提供帮助。
-
谢谢斯科特,我怀疑事情不会这么简单。你知道这种特殊的问题叫什么吗?我对networkx有一些经验,并且会自己看。
-
您可能会找到一些可以使其更容易的设置逻辑。祝你好运。
-
我在下面发布了一种解决方案的方法(对我有用)。最后,使用 networkx 库并不是绝对必要的,尽管它可能更容易。
标签: python pandas networkx graph-theory intersection