pandas 嵌套循环的替代方法

643ylb08  于 2023-01-01  发布在  其他
关注(0)|答案(1)|浏览(142)

我有一个任务是通过使用嵌套的For循环来完成的,我想知道没有循环是否也可以用一种更像Python的方式来完成。我必须填充以下数据框
| 索引|美国橄榄球联盟|NBA篮球联赛|非霍奇金淋巴瘤|美国职棒大联盟|
| - ------|- ------|- ------|- ------|- ------|
| 美国橄榄球联盟|p瓦尔|p瓦尔|p瓦尔|p瓦尔|
| NBA篮球联赛|p瓦尔|p瓦尔|p瓦尔|p瓦尔|
| 非霍奇金淋巴瘤|p瓦尔|p瓦尔|p瓦尔|p瓦尔|
| 美国职棒大联盟|p瓦尔|p瓦尔|p瓦尔|p瓦尔|
其中,p瓦尔是“W/L比率”的stats.ttest_rel()方法中的p值。要传递到ttest的列来自4个 Dataframe -上面的每个联盟都有一个 Dataframe (包含上述“W/L比率”列和一个区域列。区域列是 Dataframe 之间的公共关键字。示例如下;
| 索引|区域|W/L比值|
| - ------|- ------|- ------|
| 无|波士顿|0.66|
| 1个|丹佛|0.55|
我想把运动组合的W/L比率列传递给t测试,这样一个地区就有了这两项运动的球队。
我通过执行以下代码来完成此操作
'

sport = [merge_nfl,merge_nba,merge_nhl,merge_mlb] # our league dataframes in a list
sports = ['NFL', 'NBA', 'NHL', 'MLB']
p_values = pd.DataFrame({k:np.nan for k in sports}, index=sports)
for i in range(4):
    for j in range(4):
        merge_df_final = pd.merge(sport[i],sport[j],how='inner',left_on='Metropolitan area', right_on='Metropolitan area')
        p_values.iloc[i,j] = stats.ttest_rel(merge_df_final.iloc[:,1],merge_df_final.iloc[:,2])[1]

我想知道不使用嵌套循环是否也能得到同样的结果。

oaxa6hgo

oaxa6hgo1#

您可以使用产品模块进行此操作

from itertools import product

for i,j in product(range(4),range(4)):
    merge_df_final = pd.merge(sport[i],sport[j],how='inner',left_on='Metropolitan 
    area', right_on='Metropolitan area')
    p_values.iloc[i,j] = 
    stats.ttest_rel(merge_df_final.iloc[:,1],merge_df_final.iloc[:,2])[1]

相关问题