gpt4 book ai didi

python - 从 pandas.DataFrame 中选择包含数组的单元格的成员资格测试

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

这个问题是我的 previous one 的第 2 部分

例如我有这样的 DF:

df = pd.DataFrame({
'A': [[e for e in xrange(x+1, x+4)] for x in xrange(0, 15, 3)],
'B': [[e*10 for e in xrange(x+1, x+4)] for x in xrange(0, 15, 3)],
'C': [[e*100 for e in xrange(x+1, x+4)] for x in xrange(0, 15, 3)]
})

A B C
0 [1, 2, 3] [10, 20, 30] [100, 200, 300]
1 [4, 5, 6] [40, 50, 60] [400, 500, 600]
2 [7, 8, 9] [70, 80, 90] [700, 800, 900]
3 [10, 11, 12] [100, 110, 120] [1000, 1100, 1200]
4 [13, 14, 15] [130, 140, 150] [1300, 1400, 1500]

我需要获取 'A' 包含 10 的行。
现在我使用:

f = lambda x: 10 in x
mask = df['A'].apply(f)
df[mask]

我的问题是:

  • 这种通过成员资格测试检索的方法可行吗?还有更好的吗?
  • 将列表(和集合)放入 DF 单元格中可以吗?

最佳答案

构建多索引框架会更好。这要快得多因为这些是底层数据的 native 类型(提示:在您的框架上执行 df.dtypes,它们将是对象)

In [3]: A = pd.DataFrame([[e for e in xrange(x+1, x+4)] for x in xrange(0, 15, 3)])

In [4]: B = pd.DataFrame([[e*10 for e in xrange(x+1, x+4)] for x in xrange(0, 15, 3)])

In [5]: C = pd.DataFrame([[e*100 for e in xrange(x+1, x+4)] for x in xrange(0, 15, 3)])

# this creates a 2-level hierarchy
In [9]: df = pd.concat([A,B,C],keys=['A','B','C'],axis=1)

Out[8]:
A B C
0 1 2 0 1 2 0 1 2
0 1 2 3 10 20 30 100 200 300
1 4 5 6 40 50 60 400 500 600
2 7 8 9 70 80 90 700 800 900
3 10 11 12 100 110 120 1000 1100 1200
4 13 14 15 130 140 150 1300 1400 1500

# select out A
In [14]: df['A']
Out[14]:
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
4 13 14 15

# this is a boolean array
In [11]: df['A']>10
Out[11]:
0 1 2
0 False False False
1 False False False
2 False False False
3 False True True
4 True True True

选择特定切片

In [26]: df.ix[:,('A',1)]
Out[26]:
0 2
1 5
2 8
3 11
4 14
Name: (A, 1), dtype: int64

关于python - 从 pandas.DataFrame 中选择包含数组的单元格的成员资格测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388434/

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