Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何通过对值为元组的列应用条件来过滤数据帧?_Python 3.x_Pandas_Dataframe_Filtering - Fatal编程技术网

Python 3.x 如何通过对值为元组的列应用条件来过滤数据帧?

Python 3.x 如何通过对值为元组的列应用条件来过滤数据帧?,python-3.x,pandas,dataframe,filtering,Python 3.x,Pandas,Dataframe,Filtering,我有一个数据帧,它的列值是元组。在不重新创建数据帧的情况下,是否有办法按原样处理数据帧,以便按照以下示例过滤数据帧: 要构造数据帧(请原谅这种复杂的构造): 现在,我试图实现的是返回一个数据帧,只显示元组中第二个值为“Firm”的行。在这种情况下,那将是苹果排和梨排 是否有类似于.str.contains的方法可以在这个实例中使用?为了相应地过滤数据帧?或任何其他可直接执行过滤的合适方法 谢谢 更新: 这里有一个尝试,它至少显示了期望的结果,但没有达到目标,因为我必须将“Soft”指定为元组的第

我有一个数据帧,它的列值是元组。在不重新创建数据帧的情况下,是否有办法按原样处理数据帧,以便按照以下示例过滤数据帧:

要构造数据帧(请原谅这种复杂的构造):

现在,我试图实现的是返回一个数据帧,只显示元组中第二个值为“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)]