ループ・レベル0のインデックスを使用せずにマルチインデックス・データフレーム(基本的にgroupby記述データフレーム)に関数を適用したいと考えています。マルチインデックスのpandas apply関数
私は適用したい機能:私のデータフレームの
def CI(x):
import math
sigma = x["std"]
n = x["count"]
return 1.96 * sigma/math.sqrt(n)
サンプル:
df = df.iloc[47:52, [3,4,-1]]
a b id
47 0.218182 0.000000 0d1974107c6731989c762e96def73568
48 0.000000 0.000000 0d1974107c6731989c762e96def73568
49 0.218182 0.130909 0d1974107c6731989c762e96def73568
50 0.000000 0.000000 0fd4f3b4adf43682f08e693a905b7432
51 0.000000 0.000000 0fd4f3b4adf43682f08e693a905b7432
そして、私はナンとゼロを置き換える:IDに
df = df.replace(float(0), np.nan)
Groupyと説明私はマルチインデックスを取得します:
私は好きではないと思う現在のソリューションを向上させることができた:私はからZまでのトップレベルの列を持っている場合、だから、再び
a b
id
06f32e6e45da385834dac983256d59f3 nan nan
0d1974107c6731989c762e96def73568 0.005 0.225
0fd4f3b4adf43682f08e693a905b7432 0.008 nan
11e0057cdc8b8e1b1cdabfa8a092ea5f 0.018 0.582
120549af6977623bd01d77135a91a523 0.008 0.204
:
l_df = []
for column in df_group.columns.levels[0]:
df = pd.DataFrame({"CI" : df_group[column].apply(CI, axis = 1)})
l_df.append(df)
CI = pd.concat(l_df, axis = 1)
CI.columns = df_group.columns.levels[0]
ので、私のような何かを得ますそれぞれにstdとcount列が含まれていますが、これらの各列に同時にどのように関数を適用できますか?
サンプルは返事をあなたにジョンをありがとうございます。それはより短い解決策ですが、原則として私の解決策を言い換えるだけです。私は、ループやリスト内包のために、マルチインデックスレベルで動作することができるパンダ内のメソッドがあるかどうかを知りたがっていました。 – LostBoardOnTaurangaBeach
Genius!これは私が探していた答えです。あなたはgroupbyを何度も実行するのが普通だと思っていて、ラムダを再帰的に使う方法を考えてきました。とても有難い!あなたはポイントを報酬することができるように答えを投稿する必要があります(私は報酬のあるシステムを正しく理解している - 私は新しいです) – LostBoardOnTaurangaBeach
答えとして追加しました。 – Zero