我有一个像

languages = ['en','cs','es']
counties = ['us','ch','sp']
count = [32, 432,43]
a = {('p', 0.25937605905953339), ('q', 0.2001602214732502)}
b = {('r', 0.5937605905953339), ('4', 0.12001602214732502)}
c = {('l', 0.35337605905953339), ('r', 0.42001602214732502)}
score =[a, b, c]
df1 = pd.DataFrame({'language': languages,'county': counties, 'count' : count, 'score': score})

  language  county  count   score
0   en       us     32      {(p, 0.25937605905953337), (q, 0.2001602214732...
1   cs       ch     432     {(r, 0.5937605905953339), (4, 0.12001602214732...
2   es       sp     43      {(r, 0.42001602214732503), (l, 0.3533760590595...

现在我想分数值将被四舍五入并根据分数排序
  language  county  count   score
0   en       us     32      {(q, 0.2001), (p, 0.2593)}
1   cs       ch     432     {(4, 0.1200), (r, 0.5937)}
2   es       sp     43      {(l, 0.3533), (r, 0.4200)}

我可以为一个条目执行此操作
a = {('p', 0.25937605905953339), ('q', 0.2001602214732502)}
df1 = pd.DataFrame.from_dict(a)
df1.columns = ['Name', 'Score']
df1.Score = df1.Score.apply(lambda x: round(x,4))
df1.sort_values(by=['Score'], inplace = True)

我可以使用 for 循环为完整的数据框执行此操作,但我想以更好的方式执行此操作,例如列表理解、lambda、映射、过滤器等。有人可以帮忙吗

最佳答案

您可以使用自定义函数来舍入第二个元素并根据元组中的第二个元素进行排序并返回一个集合:

f = lambda x: set(sorted(zip([i[0] for i in x],
       [round(i[1] ,4) for i in x]),key=lambda x:x[1]))
df1['score'] = df1['score'].apply(f)
print(df1)
  language county  count                       score
0       en     us     32  {(q, 0.2002), (p, 0.2594)}
1       cs     ch    432    {(4, 0.12), (r, 0.5938)}
2       es     sp     43    {(l, 0.3534), (r, 0.42)}

关于python - Pandas 数据框|列内的字典|在列内舍入和排序 |最好的方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59667006/

10-12 18:31