python – 从pandas返回多个值适用于DataFrame

我使用一个Pandas DataFrame做一个行方式的t检验按照这个例子:

import numpy
import pandas

df = pandas.DataFrame(numpy.log2(numpy.randn(1000, 4), 
                      columns=["a", "b", "c", "d"])

df = df.dropna()

现在,假设我有“a”和“b”作为一个组,“c”和“d”在另一个,我正在执行t检验行。这是相当微不足道的熊猫,使用apply与轴= 1。但是,如果我的函数不聚合,我可以返回相同形状的DataFrame,如果聚合则返回一个Series。

通常我只输出p值(所以,聚合),但我想基于其他计算生成一个附加值(换句话说,返回两个值)。我当然可以做两个运行,首先聚合p值,然后做其他工作,但我想知道是否有一个更有效的方式这样做,因为数据是相当大。

作为计算的示例,假设函数将是:

from scipy.stats import ttest_ind

def t_test_and_mean(series, first, second):
    first_group = series[first]
    second_group = series[second]
    _, pvalue = ttest_ind(first_group, second_group)

    mean_ratio = second_group.mean() / first_group.mean()

    return (pvalue, mean_ratio)

然后调用

df.apply(t_test_and_mean, first=["a", "b"], second=["c", "d"], axis=1)

当然在这种情况下,它返回一个具有两个元组的单个系列作为值。

相反,ny预期输出将是一个具有两列的DataFrame,一个用于第一个结果,一个用于第二个结果。这是可能还是我必须做两个运行两个计算,然后将它们合并在一起?

返回一个系列,而不是元组,应该产生一个新的多列DataFrame。例如,

return pandas.Series({'pvalue': pvalue, 'mean_ratio': mean_ratio})
http://stackoverflow.com/questions/10751127/returning-multiple-values-from-pandas-apply-on-a-dataframe

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 从pandas返回多个值适用于DataFrame