2

リストに基づいてデータフレームからいくつかのデータを選択したい。私はこれを含む卑劣な質問を参照しました。私の「df2」は次のようなものです:

   col1 col2  session_number col3 col4  session
0    1.1    A               0  1.1    X        1
1    1.1    A               1  1.7    X        2
2    1.1    A               2  2.5    Y        3
3    2.6    B               0  2.6    Y        7
4    2.5    B               0  3.3    Z        5

「col2」と「session」を別のデータフレームにグループ化したい。

df3 = pd.DataFrame({'count' : df2.groupby( ["col2","session"] ).size()}).reset_index()

私のdf3は次のようになります:

   col2  session  count
0     A        1      1
1     A        2      1
2     A        3      1
3     A        6      1
4     B        5      1
5     B        7      1

ここで、col2='D' のセッション値を見つけたいと思います (データフレームの一部しか配置していないため、これらの値はここにはありません)。

li = []
li.append(df3[df3.col2 == 'D' ]['session'].values)

次に、df2 に戻り、「li」のセッション値に対応する「col1」値を取得します。

print df2[df2['session'].isin(li)]['col1'].unique()

次のエラーが発生します。

Traceback (most recent call last):
  File "/home/nilani/Desktop/testingSessions.py", line 40, in <module>
    print df2[df2['session'].isin(li)]['col1'].unique()
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.11.0-py2.7-linux-x86_64.egg/pandas/core/series.py", line 2785, in isin
    value_set = set(values)
TypeError: unhashable type: 'numpy.ndarray'

しかし、次のように「li」内で値を使用すると、エラーが発生せず、出力が正しく出力されます。

print df2[df2['session'].isin([ 4, 10])]['col1'].unique()

ここで何が問題なのですか?

4

1 に答える 1

1

これは、li が配列を含むリストであるためです。

li == [array([4, 10])]

現在、isinli を検索すると、何か4 と 10 を含む配列であるかどうかを確認しようとします (配列に含まれているのではなく)。実際には、li を検索してもエラーが発生するため、これはさらに悪いことです。

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

もっとシンプルにしたい:

li == array([4, 10])

あれは

li = df3[df3.col2 == 'D' ]['session'].unique()  # or values

ただし、前の質問では、セッションの値は col2 でグループ化して取得したため、次とまったく同じになります。

df[df['col2'] == 'D']['col1'].unique()
于 2013-07-14T08:43:09.570 に答える