Familiar with slicing in Python/pandas but how does this operate when a column-based index is set?
Have a dataframe, d
, that I’ve created a column-axis for as follows:
<code>levels_df = pd.DataFrame(levels)
levels_df = levels_df.set_axis(new_labels,axis=1).iloc[2:]
levels_df.head(10)
Out[14]:
Position 9.0 8.0 7.0 6.0 ... 7.0 8.0 9.0
Side 1.0 1.0 1.0 1.0 ... 0.0 0.0 0.0 0.0
2 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
3 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
4 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
5 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
6 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
7 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
8 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
9 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
10 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
11 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
[10 rows x 20 columns]
</code>
<code>levels_df = pd.DataFrame(levels)
levels_df = levels_df.set_axis(new_labels,axis=1).iloc[2:]
levels_df.head(10)
Out[14]:
Position 9.0 8.0 7.0 6.0 ... 7.0 8.0 9.0
Side 1.0 1.0 1.0 1.0 ... 0.0 0.0 0.0 0.0
2 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
3 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
4 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
5 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
6 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
7 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
8 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
9 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
10 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
11 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
[10 rows x 20 columns]
</code>
levels_df = pd.DataFrame(levels)
levels_df = levels_df.set_axis(new_labels,axis=1).iloc[2:]
levels_df.head(10)
Out[14]:
Position 9.0 8.0 7.0 6.0 ... 7.0 8.0 9.0
Side 1.0 1.0 1.0 1.0 ... 0.0 0.0 0.0 0.0
2 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
3 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
4 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
5 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
6 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
7 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
8 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
9 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
10 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
11 4484.75 4485.0 4485.25 4485.5 ... 4488.75 4489.0 4489.25 4489.5
[10 rows x 20 columns]
levels_df
<code>Position 9.0 8.0 7.0 6.0 5.0 4.0 3.0 2.0 1.0 0.0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
Side 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
3 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
4 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
5 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
6 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
7 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
8 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
</code>
<code>Position 9.0 8.0 7.0 6.0 5.0 4.0 3.0 2.0 1.0 0.0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
Side 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
3 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
4 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
5 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
6 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
7 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
8 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
</code>
Position 9.0 8.0 7.0 6.0 5.0 4.0 3.0 2.0 1.0 0.0 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
Side 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
3 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
4 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
5 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
6 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
7 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
8 4484.75 4485.0 4485.25 4485.5 4485.75 4486.0 4486.25 4486.5 4486.75 4487.0 4487.25 4487.5 4487.75 4488.0 4488.25 4488.5 4488.75 4489.0 4489.25 4489.5
How do I slice such a dataframe to retrieve a filtered version of the df?
For instance, something like this:
<code>levels_df.iloc[:5,(levels_df.Position==8) & (levels_df.Side==1)]
</code>
<code>levels_df.iloc[:5,(levels_df.Position==8) & (levels_df.Side==1)]
</code>
levels_df.iloc[:5,(levels_df.Position==8) & (levels_df.Side==1)]
Would return:
<code>Position 8.0
Side 1.0
2 4485.0
3 4485.0
4 4485.0
5 4485.0
6 4485.0
</code>
<code>Position 8.0
Side 1.0
2 4485.0
3 4485.0
4 4485.0
5 4485.0
6 4485.0
</code>
Position 8.0
Side 1.0
2 4485.0
3 4485.0
4 4485.0
5 4485.0
6 4485.0
Instead of the error:
<code>levels_df[(levels_df.Position==8) & (levels_df.Side==1)]
Traceback (most recent call last):
File "/tmp/ipykernel_424060/105426524.py", line 1, in <module>
levels_df[(levels_df.Position==8) & (levels_df.Side==1)]
File "/home/chris/anaconda3/lib/python3.9/site-packages/pandas/core/generic.py", line 5575, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'Position'
</code>
<code>levels_df[(levels_df.Position==8) & (levels_df.Side==1)]
Traceback (most recent call last):
File "/tmp/ipykernel_424060/105426524.py", line 1, in <module>
levels_df[(levels_df.Position==8) & (levels_df.Side==1)]
File "/home/chris/anaconda3/lib/python3.9/site-packages/pandas/core/generic.py", line 5575, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'Position'
</code>
levels_df[(levels_df.Position==8) & (levels_df.Side==1)]
Traceback (most recent call last):
File "/tmp/ipykernel_424060/105426524.py", line 1, in <module>
levels_df[(levels_df.Position==8) & (levels_df.Side==1)]
File "/home/chris/anaconda3/lib/python3.9/site-packages/pandas/core/generic.py", line 5575, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'Position'
1
I do not know why you have done it the way you did. I personaly would consider pandas multi-indexing
But this should work.
<code>
levels_df = levels_df.T
filtered_df = levels_df[(levels_df['Position'] == 8) & (levels_df['Side'] == 1)]
desired_form = filtered_df.T
</code>
<code>
levels_df = levels_df.T
filtered_df = levels_df[(levels_df['Position'] == 8) & (levels_df['Side'] == 1)]
desired_form = filtered_df.T
</code>
levels_df = levels_df.T
filtered_df = levels_df[(levels_df['Position'] == 8) & (levels_df['Side'] == 1)]
desired_form = filtered_df.T
1