我正在执行这类代码,以确定一个值是否属于数据value中的数组a:
解决方案1
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解决方案2
另一种解决办法可能是:
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内部的数组。有关于如何有效地使用这种类型的文档吗?
发布于 2020-01-13 20:15:36
IIUC,你想做的是:
df[df['a'].eq(1).groupby(level=0).transform('any')输出:
a b
0 1 4
0 2 4
0 3 4发布于 2020-01-13 20:16:52
没什么不对。这是pandas.explode()的正常行为。
要检查一个值是否属于a中的值,可以使用以下方法:
if x in df.a.explode()
其中x是您测试的目标。
发布于 2020-01-14 07:05:01
我认为可以使用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内部的数组。有关于如何有效地使用这种类型的文档吗?
我认为与list在熊猫方面的合作不是good idea。
https://stackoverflow.com/questions/59723482
复制相似问题