我正在尝试计算ballot1和ballot2的每个可能的排列。在这种情况下,我可以手动编写解决方案,但是有更“pythonic”的方式吗?
import pandas as pd
from scipy import stats
d = {'vote': [1,2,3,55],
'ballot1': [1,0,1,-1],
'ballot2': [0,1,-1,-1]
}
df1 = pd.DataFrame(data=d)
示例解决方案。订单无关紧要,只要检查选票1和2的每个组合的所有值为-1,0,1:
print(stats.f_oneway(df1[df1['ballot1']==1]['vote'],df1[df1['ballot1']==0]['vote']))
print(stats.f_oneway(df1[df1['ballot1']==1]['vote'],df1[df1['ballot1']==-1]['vote']))
print(stats.f_oneway(df1[df1['ballot1']==0]['vote'],df1[df1['ballot1']==-1]['vote']))
print(stats.f_oneway(df1[df1['ballot2']==1]['vote'],df1[df1['ballot2']==0]['vote']))
print(stats.f_oneway(df1[df1['ballot2']==1]['vote'],df1[df1['ballot2']==-1]['vote']))
print(stats.f_oneway(df1[df1['ballot2']==0]['vote'],df1[df1['ballot2']==-1]['vote']))
print(stats.f_oneway(df1[df1['ballot2']==1]['vote'],df1[df1['ballot1']==0]['vote']))
print(stats.f_oneway(df1[df1['ballot2']==1]['vote'],df1[df1['ballot1']==-1]['vote']))
print(stats.f_oneway(df1[df1['ballot2']==0]['vote'],df1[df1['ballot1']==-1]['vote']))
print(stats.f_oneway(df1[df1['ballot1']==1]['vote'],df1[df1['ballot2']==0]['vote']))
print(stats.f_oneway(df1[df1['ballot1']==1]['vote'],df1[df1['ballot2']==-1]['vote']))
print(stats.f_oneway(df1[df1['ballot1']==0]['vote'],df1[df1['ballot2']==-1]['vote']))
答案 0 :(得分:1)
看起来您正在寻找2个列表的笛卡尔积。这可以通过itertools.product
:
from itertools import product
d = {'vote': [1,2,3,55],
'ballot1': [1,0,1,-1],
'ballot2': [0,1,-1,-1]
}
for i in product(set(d['ballot1']), set(d['ballot2'])):
print(i)
# (0, 0)
# (0, 1)
# (0, -1)
# (1, 0)
# (1, 1)
# (1, -1)
# (-1, 0)
# (-1, 1)
# (-1, -1)