ilocPandas切片困难

2024-04-18 22:39:41 发布

您现在位置:Python中文网/ 问答频道 /正文

根据评论,我更新了以下信息,使其更加清晰:

我有以下数据帧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的示例如下所示:

^{pr2}$

这显然是完美的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是由整数组成的,但行与行之间存在差异。我想用这些整数作为切片的引用-我不太确定应该怎么做。在

如果有人能帮我找到解决办法那就太棒了!在

干杯


Tags: columns信息dfget评论切片整数loc
1条回答
网友
1楼 · 发布于 2024-04-18 22:39:41

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

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

也可以基于列名进行子集。还请注意,根据创建数据帧的方式,可能会将数字转换为字符串。在

要获取与223对应的行:

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

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

^{pr2}$

如果您想选择任何列包含给定字符串的行,我找到了这个解决方案: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)]

相关问题 更多 >