iloc熊猫切片困难

时间:2017-12-22 19:54:50

标签: python pandas

我已根据评论更新了以下信息:

我有以下数据帧df(它有38列,这只是最后几个):

Col #   33          34          35          36          37          38
id      09.2018     10.2018     11.2018     12.2018     LTx         LTx2
123     0.505       0.505       0.505       0.505       33          35
223     2.462       2.464       0.0         30.0        33          36
323     1.231       1.231       1.231       1.231       33          35
423     0.859       0.855       0.850       0.847       33          36

我正在尝试创建一个新列,它是使用iloc的切片的总和,因此col 123的示例如下所示:

df['LTx3'] = (df.iloc[:, 33:35]).sum(axis=1)

对于123而言,这显然是完美的,但对于223则不是。我以为这会起作用:

df['LTx3'] = (df.iloc[:, 'LTx':'LTx2']).sum(axis=1)

但是却一直得到同样的错误:

TypeError: cannot do slice indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [LTx] of <class 'str'>

我一直在尝试下面这样的一些变化,但不幸的是还没有导致任何有效的解决方案:

df['LTx3'] = (df.iloc[:, df.columns.get_loc('LTx'):df.columns.get_loc('LTx2')]).sum(axis=1)

基本上列LTx和LTx2由积分组成,但行与行不同。我想使用这些整数作为切片的参考 - 我不太确定我应该怎么做。

如果有人能帮助我找到解决方案,那就太棒了!

干杯

1 个答案:

答案 0 :(得分:1)

我建议您阅读大熊猫.loc.iloc切片: https://pandas.pydata.org/pandas-docs/stable/indexing.html

.loc根据名称选择。 .iloc根据索引(数字)位置进行选择。

您还可以根据列名进行分组。另请注意,根据您创建数据框的方式,您可能会将数字转换为字符串。

获取与223对应的行:

df3 = df[df['Col'] == '223']

获取与名称 33,34和45对应的列:

df3 = df[df['Col'] == '223'].loc[:, '33':'35']

如果要选择任何列包含给定字符串的行,我找到了此解决方案:Most concise way to select rows where any column contains a string in Pandas dataframe?

df[df.apply(lambda row: row.astype(str).str.contains('LTx2').any(), axis=1)]