LoginSignup
ryota0000
@ryota0000

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Python】DataFrameのCounterについて

Q&AClosed

Python初心者です。
DataFrameの要素をカウントしたいのですが、Counterの値が合いません。
以下コードです。

DataFrameをlistに変換(格納)

a = pd.Series(df.question)

listを表示

active1 = a.values.tolist()
print(active1)

要素数をカウント

import collections
collections.Counter(active1)

b=pd.Series(active1)
print(collections.Counter(active1))

値を別の値に変換

replace1 = a.replace(1, 4)
replace2 = replace1.replace(2, 3)
replace3 = replace2.replace(3, 0)
replace4 = replace3.replace(4, 2)
replace5 = replace4.replace(5, 1)
active1_value=replace5

要素数をカウント

import collections
collections.Counter(active1_value)

b=pd.Series(active1_value)
print(collections.Counter(active1_value))

出力結果

[5, 4, 4, 5, 5, 4, 5, 4, 2, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 4, 4, 3, 5, 3, 2, 4, 1, 5, 4, 4, 4, 5, 5, 5, 3, 5, 5, 5, 5, 5, 2, 5, 4, 3, 5, 4, 3, 4, 4, 4, 4, 4, 3, 5, 5, 4, 5, 4, 5, 5, 3, 4, 4, 4, 5, 3, 4, 3, 4, 4, 4, 5, 5, 2, 5, 5, 5, 4, 3, 5, 5, 4, 5, 5, 5, 4, 3, 4, 4, 3, 4, 5, 4, 3, 4, 3, 3, 4, 4, 4, 5, 5, 5, 4, 5, 5, 3, 5, 4, 3, 5, 4, 4, 4, 5, 4, 5, 5, 5, 5, 4, 4, 5, 4, 5, 5, 4, 3, 5, 4, 4, 5, 4, 5, 3, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 3, 5, 3, 1, 5, 5, 5, 4, 5, 5, 4, 5, 5, 4, 4, 5, 4, 5, 5, 4, 5, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 3, 3, 4, 5, 5, 5, 5, 3, 4, 5, 5, 5, 3, 5, 5, 4, 5, 4, 5, 4]
Counter({5: 106, 4: 65, 3: 28, 2: 4, 1: 3}) (元のカウント)
Counter({1: 106, 2: 68, 0: 32}) (値を置き換え後のカウント)(ここが違う)

値を置き換えただけなので本来2つ目のCounterは、
Counter({1: 106, 2: 65, 0: 28, 3: 4, 4: 3})
となるはずなのですが、他の値に加算されている結果になっています。
原因を教えてください。
よろしくお願いします。

0

1Answer

a = pd.Series([1, 2, 3, 4, 5])
replace1 = a.replace(1, 4)
replace2 = replace1.replace(2, 3)
replace3 = replace2.replace(3, 0)
replace4 = replace3.replace(4, 2)
replace5 = replace4.replace(5, 1)

pd.DataFrame([a, replace1, replace2, replace3, replace4, replace5],
             index=['a', 'replace1', 'replace2', 'replace3', 'replace4', 'replace5'])
#           0  1  2  3  4
# a         1  2  3  4  5
# replace1  4  2  3  4  5
# replace2  4  3  3  4  5
# replace3  4  0  0  4  5
# replace4  2  0  0  2  5
# replace5  2  0  0  2  1

replace114に変更されます。そしてreplace442に変更されます。
同様に、replace223に変更され、replace330に変更されます。

おそらく以下のような動作を希望しているのでしょう。

a.replace({1:4, 2:3, 3:0, 4:2, 5:1})
# 0    4
# 1    3
# 2    0
# 3    2
# 4    1
# dtype: int64
0

Comments

  1. @ryota0000

    Questioner
    なるほど、置き換えた値がまた置き換えられていたんですね。
    ありがとうございます。

Your answer might help someone💌