多くの列と行を持つDataFrame(df
)があります。2つのインデクサを使用してpandas DataFrameの値にアクセスする
私がしたいのは、2つの他の列の値がインデクサーと一致する1つの列の値にアクセスすることです。
これは私のコードは、今のように見えるものです:
df.loc[df.delays == curr_d, df.prev_delay == prev_d, 'd_stim']
それが私の目標は、同じ行の他の値はcurr_d
(であるため、列'd_stim'
内の値を選択することで、明確でない場合には'delays'
列)およびprev_d
('prev_delay'
列)。
loc
のこの使用は機能しません。次のエラーが発生します。
/home/despo/dbliss/dopa_net/behavioral_experiments/analysis_code/behavior_analysis.py in plot_prev_curr_interaction(data_frames, labels)
2061 for k, prev_d in enumerate(delays):
2062 diff = np.array(df.loc[df.delays == curr_d,
-> 2063 df.prev_delay == prev_d, 'd_stim'])
2064 ind = ~np.isnan(diff)
2065 diff_rad = np.deg2rad(diff[ind])
/usr/local/anaconda/lib/python2.7/site-packages/pandas/core/indexing.py in __getitem__(self, key)
1292
1293 if type(key) is tuple:
-> 1294 return self._getitem_tuple(key)
1295 else:
1296 return self._getitem_axis(key, axis=0)
/usr/local/anaconda/lib/python2.7/site-packages/pandas/core/indexing.py in _getitem_tuple(self, tup)
787
788 # no multi-index, so validate all of the indexers
--> 789 self._has_valid_tuple(tup)
790
791 # ugly hack for GH #836
/usr/local/anaconda/lib/python2.7/site-packages/pandas/core/indexing.py in _has_valid_tuple(self, key)
139 for i, k in enumerate(key):
140 if i >= self.obj.ndim:
--> 141 raise IndexingError('Too many indexers')
142 if not self._has_valid_type(k, i):
143 raise ValueError("Location based indexing can only have [%s] "
IndexingError: Too many indexers
必要なデータにアクセスするには適切な方法はありますか?
'df.loc [(df.delays == curr_d)&(df.prev_delay == prev_d)、 'd_stim'])'または 'df.loc [(df.delays == curr_d)&(df。あなたが 'prev_delay'カラムを持っていなければ、delays.shift()== prev_d)、 'd_stim'])'? – MaxU
@dbliss。あなたは非常に簡単なブール選択問題を持っており、これはMaxUによって正しく答えられました。 –