亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 pandas 數據集按功能分組。Cronbach 的 alpha 與 Python 中的分組數

使用 pandas 數據集按功能分組。Cronbach 的 alpha 與 Python 中的分組數

蝴蝶不菲 2023-06-13 14:49:35
假設我有一個sim_data包含 16 個變量的數據集 ( ),其中包括心理數據(問卷中的 15 個項目),第一列是分類變量(國家/地區)。我可以使用以下方法輕松按組獲取方法/標準差:sim_data.groupby("country").describe()但是,我想將來自特定包的函數(Cronbach 的 alpha)(pip install pingouin和( )與此數據一起應用,并按組import pingouin as pg獲取結果(就像我之前所做的那樣)。以下代碼不起作用。pg.cronbach_alpha(sim_data.groupby("country"))這一個都不是sim_data.groupby('country').apply(lambda?grp:?pg.cronbach_alpha())重要筆記:如果你想重現,那是我的例程和數據集我是一個重度 R 用戶,我正在將以下代碼翻譯成 pythonsim_data %>%? select('step_bfi1_ab_cor':'step_bfi39_ab_cor', "country") %>%? nest(-country) %>%? mutate(result=map(data, ~psych::alpha(.)$total)) %>%? select(country,result) %>%? unnest()歡迎提出建議。如果有另一種方法(更優雅)來解決我的問題,請告訴我。謝謝
查看完整描述

2 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

通常,base R(不是 tidy R)更容易轉換為 Python Pandas。您的 R 代碼似乎在做的是按國家/地區列對數據框進行子集化,并將每個子集運行到psych::alpha(). 然后將提取的統計數據返回到帶有國家指標的數據框中。

您可以對基數 R 執行完全相同的操作,它可以在列表理解中by轉換為 Pandas 。groupby看起來psych::alpha返回的統計數據比pingouin.cronbach_alpha. 根據需要在未經測試的代碼中調整字段和返回值。

基礎 R (使用文檔

# DEFINE METHOD

run_cronbach_alpha <- function(sub) {

    results <- psych::alpha(sub)$total    # RETURNS LIST

                      

    data.frame(country = sub$country[1],

               raw_alpha = results$raw_alpha,

               std.alpha = results$std.alpha,

               G6 = results$G6,

               average_r = results$average_r,

               median_r = results$median,

               mean = results$mean,

               sd = results$sd)

 }



# FILTER COLUMNS IN DATA FRAME

sim_short <- sim_data[c("step_bfi1_ab_cor", ..., "step_bfi39_ab_cor", "country")] 


# RUN METHOD BY COUNTRY SUBSETS TO RETURN DF LIST

results_df_list <- by(sim_short, sim_short$country, run_cronbach_alpha)


# ROW BIND ALL DFs TO SINGLE FINAL DATA FRAME

results_df <- do.call(rbind.data.frame, results_df_list)

Python Pandas (使用文檔


# DEFINE METHOD

def run_cronbach_alpha(c, sub):

    results = pg.cronbach_alpha(sub.drop(["country"], axis="columns"))    # RETURNS TUPLE


    return pd.DataFrame({'country': c, 'cronbach_alpha': results[0], index=[0]})



# FILTER COLUMNS IN DATA FRAME

sim_short = sim_data.reindex(["step_bfi1_ab_cor", ..., "step_bfi39_ab_cor", "country"], 

                             axis='columns')

                         

# RUN METHOD BY COUNTRY SUBSETS TO RETURN DF LIST

results_df_list = [run_cronbach_alpha(i, df) for i,df in sim_short.groupby("country")]


# CONCATENATE ALL DFs TO SINGLE FINAL DATA FRAME

results_df = pd.concat(results_df_list)


查看完整回答
反對 回復 2023-06-13
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

def run_cronbach_alpha(c, sub):

? ? results = pg.cronbach_alpha(sub.drop(["country"], axis="columns"))? ? # RETURNS TUPLE

? ? return pd.DataFrame({'country': c, 'cronbach_alpha': results[0]}, index = ["Result"])

? ? ? ? ? ? ? ? ? ? ? ?

# RUN METHOD BY COUNTRY SUBSETS TO RETURN DF LIST

results_df_list = [run_cronbach_alpha(i, df) for i,df in sim_data.groupby("country")]

results_df_list


查看完整回答
反對 回復 2023-06-13
  • 2 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號