首页 > 解决方案 > 函数适用于数据框的每一行,但不使用 df.apply

问题描述

我有这个熊猫数据框,每行包含两个样本 X 和 Y:

import pandas as pd
import numpy as np
df = pd.DataFrame({'X': [np.random.normal(0, 1, 10),
                         np.random.normal(0, 1, 10),
                         np.random.normal(0, 1, 10)],
                   'Y': [np.random.normal(0, 1, 10),
                         np.random.normal(0, 1, 10),
                         np.random.normal(0, 1, 10)]})

我想ttest_ind()在每一行上使用一个函数(以两个样本作为输入的统计测试),并获取响应的第一个元素(该函数返回两个元素):

我究竟做错了什么?

标签: pythonpython-3.xpandasscipy

解决方案


您只需要指定要在其上应用函数的轴。查看. _ _ apply()简而言之,axis = 1说“将函数应用于我的数据框的每一行”。默认值为axis = 0,它尝试将函数应用于每一列。

df.apply(lambda x: stats.ttest_ind(x['X'], x['Y'], equal_var = False)[0], axis=1)

0    0.985997
1   -0.197396
2    0.034277

推荐阅读