我正在执行这种代码,以查找值是否属于数据帧内的数组a
:
df = pd.DataFrame([{'a':[1,2,3], 'b':4},{'a':[5,6], 'b':7},])
df = df.explode('a')
df[df['a'] == 1]
将给出输出:
a b
0 1 4
如果有重复,这可能会变得更糟:
df = pd.DataFrame([{'a':[1,2,1,3], 'b':4},{'a':[5,6], 'b':7},])
df = df.explode('a')
df[df['a'] == 1]
将给出输出:
a b
0 1 4
0 1 4
另一个解决方案可能是这样:
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)]
如果数据框很大,则Lambda不能快速运行。
作为第一个目标,我希望值1
属于a
的所有行:
因此,我试图了解如何处理Pandas内部的数组。是否有一些有关如何有效使用此类型的文档?
答案 0 :(得分:0)
IIUC,您正在尝试:
df[df['a'].eq(1).groupby(level=0).transform('any')
输出:
a b
0 1 4
0 2 4
0 3 4
答案 1 :(得分:0)
没有错。这是pandas.explode()
的正常行为。
要检查某个值是否属于a
中的值,可以使用以下方法:
if x in df.a.explode()
其中x
是您要测试的内容。
答案 2 :(得分:0)
我认为您可以使用DataFrame
构造函数将数组转换为标量,然后使用DataFrame.eq
和DataFrame.any
测试值:
df = df[pd.DataFrame(df['a'].tolist()).eq(1).any(axis=1)]
print (df)
a b
0 [1, 2, 1, 3] 4
详细信息:
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内部的数组。是否有一些有关如何有效使用此类型的文档?
我认为在good idea中使用list
大熊猫不是这样。