Pandas:如何测试 top-n-dataframe 是不是真的来自原始数据框
Posted
技术标签:
【中文标题】Pandas:如何测试 top-n-dataframe 是不是真的来自原始数据框【英文标题】:Pandas: how to test that top-n-dataframe really results from original dataframePandas:如何测试 top-n-dataframe 是否真的来自原始数据框 【发布时间】:2016-02-22 19:15:28 【问题描述】:我有一个 DataFrame,foo:
A B C D E
0 50 46 18 65 55
1 48 56 98 71 96
2 99 48 36 79 70
3 15 24 25 67 34
4 77 67 98 22 78
还有另一个 Dataframe,bar,它包含 foo 的每一行的最大 2 个值。所有其他值都已替换为零,以创建稀疏性:
A B C D E
0 0 0 0 65 55
1 0 0 98 0 96
2 99 0 0 79 0
3 0 0 0 67 34
4 0 0 98 0 78
如何测试 bar 中的每一行是否真的包含所需的值?
还有一件事:该解决方案应该适用于大型 DateFrame,即 20000 X 20000。
【问题讨论】:
【参考方案1】:显然,您可以通过循环和高效排序来做到这一点,但也许更好的方法是:
n = foo.shape[0]
#Test1:
#bar dataframe has original data except zeros for two values:
diff = foo - bar
test1 = ((diff==0).sum(axis=1) == 2) == n
#Test2:
#bar dataframe has 3 zeros on each line
test2 = ((bar==0).sum(axis=1) == 3) == n
#Test3:
#these 2 numbers that bar has are the max
bar2=bar.replace(0:pandas.np.nan(), inplace=True
#the max of remaining values is smaller than the min of bar:
row_ok = (diff.max(axis=1) < bar.min(axis=1))
test3 = (ok.sum() == n)
我认为这涵盖了所有情况,但尚未全部测试...
【讨论】:
以上是关于Pandas:如何测试 top-n-dataframe 是不是真的来自原始数据框的主要内容,如果未能解决你的问题,请参考以下文章
Python: Pandas运算的效率探讨以及如何选择高效的运算方式
如何测试字符串包含列表中的元素并通过 Pandas 将目标元素分配给另一列
如何按百分比将 CSV 数据集拆分为训练集和测试集,并将拆分后的数据集与 pandas 一起保存到本地文件夹中? [复制]