パンダ、関数の戻り誤った結果を適用します。

カルロス・カルバリョ:

私は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"

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=373242&siteId=1