我想删除一个县内的种族(少于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
答案 0 :(得分:0)
这是实现目标的一种方式
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'