【发布时间】:2019-06-07 03:48:48
【问题描述】:
我有两个包含许多级别和列的多索引数据框。我正在寻找最快的方法来迭代数据帧并计数,对于每一行,每个数据帧中有多少单元格高于特定值,然后找到两个数据帧的行的交叉点,其中至少得分一个计数。
现在我正在使用 for 循环和 groupby 的组合在数据帧中循环,但是我花了太多时间来找到正确的答案(我的真实数据帧包含数千个级别和数百列)所以我需要找到一种不同的方式来做到这一点。
例如:
idx = pd.MultiIndex.from_product([[0,1],[0,1,2]],names=
['index_1','index_2'])
col = ['column_1', 'column_2']
values_list_a=[[1,2],[2,2],[2,1],[-8,1],[2,0],[2,1]]
DFA = pd.DataFrame(values_list_a, idx, col)
DFA:
columns_1 columns2
index_1 index_2
0 0 1 2
1 2 2
2 2 1
1 0 -8 1
1 2 0
2 2 1
values_list_b=[[2,2],[0,1],[2,2],[2,2],[1,0],[1,2]]
DFB = pd.DataFrame(values_list_b, idx, col)
DFB:
columns_1 columns2
index_1 index_2
0 0 2 2
1 0 1
2 2 2
1 0 2 2
1 1 0
2 1 2
我的期望是:
第 1 步计数发生次数:
DFA:
columns_1 columns2 counts
index_1 index_2
0 0 1 2 1
1 2 2 2
2 2 1 1
1 0 -8 1 0
1 2 0 1
2 2 1 1
DFB:
columns_1 columns2 counts
index_1 index_2
0 0 2 2 2
1 0 1 0
2 2 2 2
1 0 2 2 2
1 1 0 0
2 1 2 1
第 2 步:计数 >0 的 2 个数据帧的交集应该像这样创建一个新的数据帧(记录在相同索引中得分至少一个计数的两个数据帧的行,并添加一个新的 index_0 级别) . index_0 = 0 应指 DFA, index_0=1 应指 DFB:
DFC:
columns_1 columns2 counts
index_0 index_1 index_2
0 0 0 1 2 1
2 2 1 1
1 2 2 1 1
1 0 0 2 2 2
2 2 2 2
1 2 1 2 1
【问题讨论】:
-
你能提供代码来创建你的DataFrames吗?处理多指数很困难
-
我正在寻找迭代数据帧和计数的最快方法所以你的
specific value是1? -
是任何值 >=2(或大于 1)的单元格
标签: python python-3.x pandas dataframe count