去除Pandas体内不符合条件的细胞

2024-04-20 01:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here我想删除一个县的种族(少于1%)。 我在用熊猫。如果你注意到一些种族在一个县的值小于1%。我想忽略那些种族,展示人口更多的种族

CensusTract State   County  TotalPop    Men   Women Hispanic    White   Black   Native  Asian   Pacific
1001020100  Alabama Autauga  1948       940   1008     0.9      87.4    7.7      0.3    0.6      0
1001020400  Alabama Autauga  4423       2172  2251     10.5     82.8    3.7      1.6    0        0

我试过这个

dataset = tract_data.query("Income >= 50000 & Poverty > 50")

dataset.loc[:,'Races'] = dataset.apply(lambda row: list(zip(list(row.index) 
[6:12], list(row)[6:12])), axis =1)
dataset.loc[:,'Races'] = dataset.Races.apply(lambda x: '; '.join(['{}: 
{}'.format(t[0], t[1]) for t in  list(filter(lambda x: x[1]> 1, x))]))
income = dataset[['CensusTract', 'State', 'County','Races']]

print(dataset['Races'])

但我还是有错误

这就是我想要的

CensusTract State       County  races
1001020100 Alabama Autauga White: 87.4 Black: 7.7
1001020400 Alabama Autauga Hispanic: 10.5 White: 82.8 Black: 3.7 Native: 1.6

Tags: lambdadatasetlistrowblackstatenativewhite
1条回答
网友
1楼 · 发布于 2024-04-20 01:30:08

这是实现你目标的一种方法

df['Races'] = df.apply(lambda row: list(zip(list(row.index)[6:], list(row)[6:])), axis =1)
df['Races'] = df.Races.apply(lambda x: '; '.join(['{}: {}'.format(t[0], t[1]) for t in  list(filter(lambda x: x[1]> 1, x))]))

最后,如果我们打印df,这里是我们得到的。你知道吗

    CensusTract State   County  TotalPop    Men Women   Hispanic    White   Black   Native  Asian   Pacific Races
0   1001020100  Alabama Autauga 1948    940     1008    0.9         87.4    7.7      0.3       0.6     0.0  White: 87.4; Black: 7.7
1   1001020400  Alabama Autauga 4423    2172    2251    10.5        82.8    3.7      1.6       0.0     0.0  Hispanic: 10.5; White: 82.8; Black: 3.7; Nativ...

这是我的想法。我们要比较的值在第6列和最后一列中。对于每一行,我们希望显示行名以及其中的值(如果值大于1)。现在list(row.index)给我们该行的列名,list(row)给我们该行中的值作为列表。我们可以压缩这些列表以获得元组列表[(column_name, value)]。你知道吗

然后我们可以通过key = value过滤元组列表,只包含value大于1的元组。过滤之后,我们将得到一个元组列表,剩下的工作就是格式化元组列表,以我们喜欢的方式显示答案。要了解过滤的工作原理,请尝试:

x = [('col1', 8), ('col2', 10), ('col3', 0.9), ('col4', 30)]
'; '.join(['{}: {}'.format(t[0], t[1]) for t in  list(filter(lambda x: x[1]> 1, x))])

结果应该是

>>> 'col1: 8; col2: 10; col4: 30'

相关问题 更多 >