Python 3.x 如何通过对值为元组的列应用条件来过滤数据帧?
我有一个数据帧,它的列值是元组。在不重新创建数据帧的情况下,是否有办法按原样处理数据帧,以便按照以下示例过滤数据帧: 要构造数据帧(请原谅这种复杂的构造): 现在,我试图实现的是返回一个数据帧,只显示元组中第二个值为“Firm”的行。在这种情况下,那将是苹果排和梨排 是否有类似于.str.contains的方法可以在这个实例中使用?为了相应地过滤数据帧?或任何其他可直接执行过滤的合适方法 谢谢 更新: 这里有一个尝试,它至少显示了期望的结果,但没有达到目标,因为我必须将“Soft”指定为元组的第一部分,这应该是不必要的。这也让人感觉像是一种黑客行为:Python 3.x 如何通过对值为元组的列应用条件来过滤数据帧?,python-3.x,pandas,dataframe,filtering,Python 3.x,Pandas,Dataframe,Filtering,我有一个数据帧,它的列值是元组。在不重新创建数据帧的情况下,是否有办法按原样处理数据帧,以便按照以下示例过滤数据帧: 要构造数据帧(请原谅这种复杂的构造): 现在,我试图实现的是返回一个数据帧,只显示元组中第二个值为“Firm”的行。在这种情况下,那将是苹果排和梨排 是否有类似于.str.contains的方法可以在这个实例中使用?为了相应地过滤数据帧?或任何其他可直接执行过滤的合适方法 谢谢 更新: 这里有一个尝试,它至少显示了期望的结果,但没有达到目标,因为我必须将“Soft”指定为元组的第
df = df.where(df['Firmness'] == ('Soft', 'Firm')).dropna()
df
Color Firmness Volume
Fruit
Apple (Green, Red) (Soft, Firm) 10.0
Pear (Green, Green) (Soft, Firm) 10.0
使用if…else尝试使用
agg
out = df.groupby('Fruit').agg(lambda x : x.sum() if x.dtype==int else tuple(x))
Out[332]:
Color Firmness Volume
Fruit
Apple (Green, Red) (Soft, Firm) 10
Blueberry (Blue, Blue) (Soft, Soft) 10
Pear (Green, Green) (Soft, Firm) 10
那么你的问题呢
out = out[out.Firmness.str[1]=='Firm']
out
Out[335]:
Color Firmness Volume
Fruit
Apple (Green, Red) (Soft, Firm) 10
Pear (Green, Green) (Soft, Firm) 10
使用if…else尝试使用
agg
out = df.groupby('Fruit').agg(lambda x : x.sum() if x.dtype==int else tuple(x))
Out[332]:
Color Firmness Volume
Fruit
Apple (Green, Red) (Soft, Firm) 10
Blueberry (Blue, Blue) (Soft, Soft) 10
Pear (Green, Green) (Soft, Firm) 10
那么你的问题呢
out = out[out.Firmness.str[1]=='Firm']
out
Out[335]:
Color Firmness Volume
Fruit
Apple (Green, Red) (Soft, Firm) 10
Pear (Green, Green) (Soft, Firm) 10
对于您的问题,请使用apply和lambda
df[df.apply(λx:x.Firmness[1]='Firm',axis=1)]
对于您的问题,使用apply和lambda
df[df.应用(λx:x.硬度[1]='Firm',轴=1)]