【发布时间】:2021-10-24 04:25:17
【问题描述】:
正在尝试向元组过滤器添加加法条件......
没有附加条件的当前工作元组过滤器(稍后讨论):
import pandas as pd
data = [['A',23], ['D',50], ['C',32], ['D',21], ['D',24], ['B',20], ['C',68], ['A',52], ['A',41],[ 'D',44], ['B',29], ['B',70], ['B',33], ['C',56], ['A',72]]
df = pd.DataFrame(data, columns = ['group', 'age'])
group_mask = {(20, 30): 'A', (25, 30): 'B', (65, 70): 'C', (40, 50): 'D'}
df['range'] = df['group'].map({v:k for k, v in group_mask.items()})
df['in_range'] = (df['range'].str[0] <= df['age']) & (df['age'] <= df['range'].str[1])
#filtered
df = df[df['in_range']]
df.drop(columns=['range', 'in_range'], inplace=True)
上面的代码将数据帧过滤到年龄等于或在每个相应组的 group_mask 中设置的范围之间的行。 从而产生以下输出...
group age
0 A 23
1 D 50
6 C 68
9 D 44
10 B 29
但是,我需要考虑一个附加条件(列);专栏gender。根据gender,group 的age 过滤器范围会有所不同
数据现在已被修改,以包括这一附加列:
data = [['A', 'male', 23], ['D','female',50], ['C','male',32], ['D','male',21], ['D','female',24], ['B','female',20], ['C','male',68], ['A','male',52], ['A','male',41],[ 'D','male',44], ['B','female',29], ['B','female',70], ['B','female',33], ['C','female',56], ['A','female',72]]
df = pd.DataFrame(data, columns = ['group', 'gender', 'age'])
但是,将现有的 group_mask 元组过滤器调整为现在包含“性别”相关范围是我遇到的问题,如下所示。
我尝试过从....更改...
group_mask = {(20, 30): 'A', (25, 30): 'B', (65, 70): 'C', (40, 50): 'D'}
到....
group_mask = {(((20, 30), 'A') , 'male' ), (((25, 30), 'B') , 'male' ), (((65, 70), 'C') , 'male' ), (((40, 50), 'D'), 'male' ), \
(((60, 80), 'A') , 'female'), (((15, 30), 'B'), 'female'), (((50, 60), 'C'), 'female'), (((30, 40), 'D'), 'female' )}
..然后重新应用map 和过滤器....
df['range'] = df[['group', 'gender']].map({v:k for k, v in group_mask .items()})
df['in_range'] = (df['range'].str[0] <= df['age']) & (df['age'] <= df['range'].str[1])
但是,它会引发错误消息AttributeError: 'DataFrame' object has no attribute 'map'
首先,我不确定修改后的group_mask 的格式是否正确,其次我不确定如何更正map 函数。
需要帮助。提前谢谢你。
【问题讨论】:
-
您的意思是
df[['group', 'gender']].map({v:k for k, v in group_mask .items()})而不是df['group', 'gender'].map({v:k for k, v in group_mask .items()})? -
另外,
group_mask不是字典,对吧?group_mask .items()是什么意思? -
当我尝试
df[['group', 'gender']].map({v:k for k, v in group_mask .items()})时,我收到以下错误消息.....AttributeError: 'DataFrame' object has no attribute 'map' -
是的,它并没有完全解决问题,但它解决了部分问题,因为当您查询两列时,您需要使用
df[['group', 'gender']]之类的列表而不是df['group', 'gender']。 -
“另外,group_mask 不是字典,对吗?group_mask .items() 是什么意思?” group_mask 在顶部的第一个示例中使用,现在我想添加
gender作为键或条件
标签: python pandas dataframe tuples filtering