Tôi đang sử dụng một Pandas DataFrame
để làm một t-test hàng khôn ngoan theo ví dụ này:Trở nhiều giá trị từ gấu trúc được áp dụng trên DataFrame
import numpy
import pandas
df = pandas.DataFrame(numpy.log2(numpy.randn(1000, 4),
columns=["a", "b", "c", "d"])
df = df.dropna()
Bây giờ, giả sử tôi có "a" và " b "như là một nhóm, và" c "và" d "ở bên kia, tôi đang thực hiện thử nghiệm hàng t-test. Điều này là khá tầm thường với gấu trúc, sử dụng apply
với trục = 1. Tuy nhiên, tôi có thể trả về một DataFrame có cùng hình dạng nếu hàm của tôi không tổng hợp hoặc một Chuỗi nếu tổng hợp.
Thông thường tôi sẽ chỉ xuất giá trị p (vì vậy, tổng hợp) nhưng tôi muốn tạo thêm giá trị dựa trên các phép tính khác (nói cách khác, trả về hai giá trị). Dĩ nhiên tôi có thể thực hiện hai lần chạy, tổng hợp các giá trị p trước, sau đó thực hiện công việc khác, nhưng tôi đã tự hỏi liệu có cách nào hiệu quả hơn để làm như vậy vì dữ liệu là hợp lý lớn không.
Như một ví dụ về tính toán, một chức năng hypotethical sẽ là:
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)
Sau đó gọi với
df.apply(t_test_and_mean, first=["a", "b"], second=["c", "d"], axis=1)
Tất nhiên trong trường hợp này nó trả về một dòng duy nhất với hai bộ dữ liệu như giá trị .
Thay vào đó, đầu ra được mong đợi sẽ là một DataFrame có hai cột, một cột cho kết quả đầu tiên và một cho cột thứ hai. Điều này có thể hoặc tôi phải thực hiện hai lần chạy cho hai phép tính, sau đó hợp nhất chúng lại với nhau?
Tại sao bạn sử dụng 'áp dụng' ngay từ đầu? Kết quả của bạn là một 'DataFrame' mới với một hình dạng khác với đầu vào (cả hàng và cột), do đó nó là một obj hoàn toàn mới. Bạn chỉ có thể 't_test_and_mean' chấp nhận dataframe đầu vào của bạn (và các cột để nhóm theo) và trả về một dataframe 1-row-2-cột, mà không sử dụng' apply'. – lbolla
@ lbolla Phải, cuối cùng tôi đã làm điều đó trong mã của tôi, cuối cùng. – Einar