Reputation: 2952
When using loc, it seems I can either specify a list with separate column labels or a slice.
However, can I combine a slice with an additional column label and -if so- how?
I tried
games.loc[games.Platform.isin(['X360']),['Platform','NA_Sales':'Other_Sales']]
but this throws a syntax error...
Upvotes: 0
Views: 368
Reputation: 2952
After some thinking, I came up with my own solution: extract the single column and slice separately and concat
them. I like it less than some answers posted here but anyway:
pd.concat([pd.DataFrame(games.loc[:,'Platform']),games.loc[:,'NA_Sales':'Other_Sales']],axis=1)
did the exact same job as
df.loc[:, ['Platform',*df.loc[:,'NA_Sales':'Other_Sales'].columns]]
Thanks everyone for your support, I appreciated it.
Upvotes: 0
Reputation: 4543
Use:
#Preparing sample data
string = """A B C D
1 a a 1
1 a a 2
1 a a 3
2 a a 1
2 a a -1
3 a a -1
3 a a -2
3 a a -3"""
import numpy as np
data = [x.split() for x in string.split('\n')]
import pandas as pd
df = pd.DataFrame(np.array(data[1:]), columns = data[0])
# making a function to map col name to col index
c = df.columns
def indexer(col):
return c.to_list().index(col)
# converting and appending other columns
start = indexer('A')
end = indexer('C')
cols = c[start:end].to_list()
cols.append('D')
df.loc[:, cols]
Output:
A B D
0 1 a 1
1 1 a 2
2 1 a 3
3 2 a 1
4 2 a -1
5 3 a -1
6 3 a -2
7 3 a -3
Which includes both slice (A:C) and an specified column(D).
Upvotes: 2
Reputation: 71689
loc
df.loc[:, ['D', *df.loc[:, 'A':'C'].columns]]
D A B C
0 1 1 a a
1 2 1 a a
2 3 1 a a
3 1 2 a a
4 -1 2 a a
5 -1 3 a a
6 -2 3 a a
7 -3 3 a a
Upvotes: 3
Reputation: 28699
Using @keramat's data, you can use select_columns from pyjanitor to select columns (it offers some flexibility in selection options):
#pip install pyjanitor
import pandas as pd
import janitor
df = {'A': ['1', '1', '1', '2', '2', '3', '3', '3'],
'B': ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'],
'C': ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'],
'D': [1, 2, 3, 1, -1, -1, -2, -3]}
df = pd.DataFrame(df)
df.select_columns(slice('A', 'C'), 'D')
A B C D
0 1 a a 1
1 1 a a 2
2 1 a a 3
3 2 a a 1
4 2 a a -1
5 3 a a -1
6 3 a a -2
7 3 a a -3
You can't use the :
shortcut for slice
, you have to explicitly use the slice
function.
If you can, kindly provide an example that closely matches what you have in mind, and I'll see if select_columns
can help, or use some native pandas options.
Upvotes: 2