Python3:根据上一个R中的列值对DF的Dict进行排序

2024-09-22 10:18:33 发布

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

df的指令:

years = [2017, 2018, 2019]
dfcols = ['Count', 'Amount']
dataframedict = {'CatA': pd.DataFrame(data=[[1, 5], [2, 6], [3, 7]], columns=dfcols, index=years), 
                'CatB': pd.DataFrame(data=[[4, 8], [5, 9], [6, 19]], columns=dfcols, index=years), 
                'CatC': pd.DataFrame(data=[[7,11], [8,12], [9,13]], columns=dfcols, index=years)}

需要2019年按“金额”降序排列的dict密钥列表,因此['CatB'、'CatC'、'CatA']

尝试,以下this变体:

for k in sorted(dataframedict, key=lambda df: df.Amount[-1], reverse=True):
    print(k)

获取错误:AttributeError: 'str' object has no attribute 'Amount'

谢谢


Tags: columnsdataframedfdataindexcount指令amount
2条回答

如果您只需要一个列表,那么可以使用列表理解和字典的.items方法来检索键和数据帧

[
    k for k, df 
    in sorted(dataframedict.items(), key=lambda x: x[1].Amount.iloc[-1], reverse=True)
]
# returns:
['CatB', 'CatC', 'CatA']

您可以将dict转换为元组排序列表:

for k, v in sorted(dataframedict.items(), key=lambda x: x[1].Amount.iloc[-1], reverse=True):
    print(k)

输出:

CatB
CatC
CatA

请注意,我正在将.items()传递给sorted。每一个都是长度为2的元组(x[0]是键,x[1]是值/df)

现在,关于您的错误:当您以排序方式传递dict时,将考虑dict的键:

>>> a = {1: "ad", 0: "ads"}
>>> sorted(a, key=lambda x: x)
[0, 1]

因此,您在lambda中传递字符串

相关问题 更多 >