首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫阵列的滤波

熊猫阵列的滤波
EN

Stack Overflow用户
提问于 2020-01-13 20:09:54
回答 3查看 359关注 0票数 1

我正在执行这类代码,以确定一个值是否属于数据value中的数组a

解决方案1

代码语言:javascript
复制
df = pd.DataFrame([{'a':[1,2,3], 'b':4},{'a':[5,6], 'b':7},])
df = df.explode('a')
df[df['a'] == 1]

将给出输出:

代码语言:javascript
复制
    a   b
0   1   4

问题

如果有重复,这可能是最糟糕的:

代码语言:javascript
复制
df = pd.DataFrame([{'a':[1,2,1,3], 'b':4},{'a':[5,6], 'b':7},])
df = df.explode('a')
df[df['a'] == 1]

将给出输出:

代码语言:javascript
复制
    a   b
0   1   4
0   1   4

解决方案2

另一种解决办法可能是:

代码语言:javascript
复制
df = pd.DataFrame([{'a':[1,2,1,3], 'b':4},{'a':[5,6], 'b':7},])
df = df[df['a'].map(lambda row: 1 in row)]

问题

如果Dataframe是大的,Lambda就不能跑得快。

问题

作为第一个目标,我需要1值属于a的所有行

不使用

  • ...

  • ,因为它具有高性能的
  • ,避免了内存问题(
  • )

所以我想弄清楚如何处理Pandas内部的数组。有关于如何有效地使用这种类型的文档吗?

EN

回答 3

Stack Overflow用户

发布于 2020-01-13 20:15:36

IIUC,你想做的是:

代码语言:javascript
复制
df[df['a'].eq(1).groupby(level=0).transform('any')

输出:

代码语言:javascript
复制
   a  b
0  1  4
0  2  4
0  3  4
票数 0
EN

Stack Overflow用户

发布于 2020-01-13 20:16:52

没什么不对。这是pandas.explode()的正常行为。

要检查一个值是否属于a中的值,可以使用以下方法:

if x in df.a.explode()

其中x是您测试的目标。

票数 0
EN

Stack Overflow用户

发布于 2020-01-14 07:05:01

我认为可以使用DataFrame构造函数将数组转换为标量,然后使用DataFrame.eqDataFrame.any测试值。

代码语言:javascript
复制
df = df[pd.DataFrame(df['a'].tolist()).eq(1).any(axis=1)]
print (df)
              a  b
0  [1, 2, 1, 3]  4

详细信息

代码语言:javascript
复制
print (pd.DataFrame(df['a'].tolist()))
   0  1    2    3
0  1  2  1.0  3.0
1  5  6  NaN  NaN

print (pd.DataFrame(df['a'].tolist()).eq(1))
       0      1      2      3
0   True  False   True  False
1  False  False  False  False

,所以我试着理解如何处理Pandas内部的数组。有关于如何有效地使用这种类型的文档吗?

我认为与list在熊猫方面的合作不是good idea

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59723482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档