カルロス・カルバリョ:
私は1つの列にある各機能の割合を返す必要があり、この機能でこの問題をしました。
ここではいくつかのデータは、アイデアを作るのは簡単くらいです。
df2 = pd.DataFrame({'X': ['A', 'A', 'B' , 'C'], 'Y': [1, 0, 0 , 1], 'Z': [1, 0, 1 , 1]})
df2['X'].value_counts()
私は私が得る値をカウントすると
A 2
B 1
C 1
今、私は「X」の各値の割合を取得する必要があります
for freq in df2['X'].value_counts():
#print(freq)
print(freq/df2['X'].value_counts().sum())
下記の結果:
0.5
0.25
0.25
パーフェクト、
今、私は自分のデータフレームに適用され、新しい列を取得する必要があります。機能下:
def get_proportion(df):
for freq in df2['X'].value_counts():
return (freq/df2['X'].value_counts().sum())
df2["A"]=df2.apply(get_proportion, axis=1)
結果:
X Y Z A
0 A 1 1 0.5
1 A 0 0 0.5
2 B 0 1 0.5
3 C 1 1 0.5
私が取得する必要があります
X Y Z A
0 A 1 1 0.5
1 A 0 0 0.5
2 B 0 1 0.25
3 C 1 1 0.25
どうしましたか ?
ループの下のセットの戻りは、私はインデントエラーを取得する場合
def get_proportion(df):
for freq in df['X'].value_counts():
return freq/df['X'].value_counts().sum()
IndentationError:予想インデントブロック
私は、引数を設定した場合
df2["A"]=df2.apply(get_proportion(df2), axis=1)
私はエラーを取得します
TypeError: 'numpy.float64' object is not callable
あなたが助けることができる場合は、ありがとうございました。
MarianD:
df2["A"] = df2.X.apply(lambda x: (df2["X"].value_counts() / len(df2))[x])
len(df2)
データフレームの行数ですdf2
、(df2["X"].value_counts() / len(df2))
列の要素の相対的出現箇所と直列です"X"
。