gpt4 book ai didi

python - 通过条件子集数据框中的索引提取列

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:52 25 4
gpt4 key购买 nike

我有一个数据框:

import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(8, 4))
df.columns = ['a','b','c','d']
print(df)
a b c d
0 2.454522 1.609990 1.218581 -0.133827
1 0.462152 0.939479 -0.626329 1.169886
2 0.334338 -1.188042 -1.387660 -1.874766
3 0.576941 -0.362167 2.321634 1.415192
4 -0.234557 -1.468935 -1.090757 1.392798
5 -1.316241 0.939276 0.508557 1.187436
6 1.140832 1.588225 -0.046766 -0.329412
7 -1.533695 -0.565144 -0.133613 -1.941484

我想选择第二列中值大于零的行。我可以做到这一点

df1 = df.loc[df.iloc[:,0] >= 0]
a b c d
0 2.454522 1.609990 1.218581 -0.133827
1 0.462152 0.939479 -0.626329 1.169886
2 0.334338 -1.188042 -1.387660 -1.874766
3 0.576941 -0.362167 2.321634 1.415192
6 1.140832 1.588225 -0.046766 -0.329412

但我的要求是 df1 应仅包含第二列和第四列。

          b         d
0 1.609990 -0.133827
1 0.939479 1.169886
2 -1.188042 -1.874766
3 -0.362167 1.415192
6 1.588225 -0.329412

这我可以做到

df1 = df1.iloc[:, [1,3]]

我可以在同一行代码中使用列名和索引对行应用条件吗?

最佳答案

选择带有索引的列:

print (df.columns[[1,3]])
Index(['b', 'd'], dtype='object')

df1 = df.loc[df.iloc[:,0] >= 0, df.columns[[1,3]]]
print (df1)
b d
0 1.609990 -0.133827
1 0.939479 1.169886
2 -1.188042 -1.874766
3 -0.362167 1.415192
6 1.588225 -0.329412

因为 iloc 的解决方案未实现:

df1 = df.iloc[df.iloc[:,0] >= 0, [1,3]]

NotImplementedError: iLocation based boolean indexing on an integer type is not available

但是如果将掩码转换为 numpy 数组,它会很好地工作:

df1 = df.iloc[df.iloc[:,0].values >= 0, [1,3]]
print (df1)
b d
0 1.609990 -0.133827
1 0.939479 1.169886
2 -1.188042 -1.874766
3 -0.362167 1.415192
6 1.588225 -0.329412
<小时/>

有了列名就更简单了:

df1 = df.loc[df.iloc[:,0] >= 0, ['b','d']]
print (df1)
b d
0 1.609990 -0.133827
1 0.939479 1.169886
2 -1.188042 -1.874766
3 -0.362167 1.415192
6 1.588225 -0.329412

编辑:

有一个小拼写错误,第二列需要df.iloc[:,1]:

df1 = df.loc[df.iloc[:,1] >= 0, df.columns[[1,3]]]
df1 = df.iloc[df.iloc[:,1].values >= 0, [1,3]]
df1 = df.loc[df.iloc[:,1] >= 0, ['b','d']]
<小时/>
print (df1)

b d
0 1.609990 -0.133827
1 0.939479 1.169886
5 0.939276 1.187436
6 1.588225 -0.329412

关于python - 通过条件子集数据框中的索引提取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com