我想使用列索引从pandas数据帧特定列中进行选择。
特别是,我想通过R中c(12:26,69:85,96:99,134:928,933:935,940:967)
生成的列索引选择列索引。我想知道如何在Python中执行此操作?
我正在考虑以下内容,但当然,python没有一个名为c()的函数......
input2 = input2.iloc[:,c(12:26,69:85,96:99,134:928,933:935,940:967)]
答案 0 :(得分:5)
将@hrbrmstr的评论放到答案中,因为它解决了我的问题,我想说清楚这个问题已经解决了。另外,请注意范围(a,b)给出数字(a,a + 1,...,b-2,b-1),并且不包括b。
R&#39组合功能
c(4,12:26,69:85,96:99,134:928,933:935)
被翻译成Python
[4] + list(range(12,27)) + list(range(69,86)) + list(range(96,100)) + list(range(134,929)) + list(range(933,936))
答案 1 :(得分:4)
相当于numpy的r_
。它结合了切片而无需为每个切片调用范围:
np.r_[2:4, 7:11, 21:25]
Out: array([ 2, 3, 7, 8, 9, 10, 21, 22, 23, 24])
df = pd.DataFrame(np.random.randn(1000))
df.iloc[np.r_[2:4, 7:11, 21:25]]
Out:
0
2 2.720383
3 0.656391
7 -0.581855
8 0.047612
9 1.416250
10 0.206395
21 -1.519904
22 0.681153
23 -1.208401
24 -0.358545
答案 2 :(得分:0)
要回答实际问题,
R c()函数的Python等效功能,用于数据框列索引吗?
我使用的是c()
c = lambda v: v.split(',') if ":" not in v else eval(f'np.r_[{v}]')
然后我们可以做类似的事情:
df = pd.DataFrame({'x': np.random.randn(1000),
'y': np.random.randn(1000)})
# row selection
df.iloc[c('2:4,7:11,21:25')]
# columns by name
df[c('x,y')]
# columns by range
df.T[c('12:15,17:25,500:750')]
就象R一样的语法而言,这差不多。
好奇的心
请注意,按照上述规定使用c()
会导致性能下降。 np.r_
。释义Knuth,让我们不要过早优化;-)
%timeit np.r_[2:4, 7:11, 21:25]
27.3 µs ± 786 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit c("2:4, 7:11, 21:25")
53.7 µs ± 977 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)