Python 是否将已排序的表从数据帧发送到前端?
我正在对财务数据进行一些计算,我的原始json如下所示:Python 是否将已排序的表从数据帧发送到前端?,python,json,pandas,dataframe,Python,Json,Pandas,Dataframe,我正在对财务数据进行一些计算,我的原始json如下所示: [ { "company": "Apple Inc", "earnings_yield": "0.032220032460810885", "roic": "0.18313585674458502" }, { "company": "Microso
[
{
"company": "Apple Inc",
"earnings_yield": "0.032220032460810885",
"roic": "0.18313585674458502"
},
{
"company": "Microsoft Corporation",
"earnings_yield": "0.0360941393518613",
"roic": "0.1955875358727057"
}
]
{
"company": {
"0": "Apple Inc",
"1": "Microsoft Corporation"
},
"earnings_yield": {
"0": 0.0322200325,
"1": 0.0360941394
},
"roic": {
"0": 0.1831358567,
"1": 0.1955875359
},
"roic_rank": {
"0": 1,
"1": 2
},
"ey_rank": {
"0": 1,
"1": 2
},
"sum_rank": {
"0": 2,
"1": 4
}
}
'{"0":{"company":{"0":"Apple Inc"},"earnings_yield":{"0":"0.032220032460810885"},"roic":{"0":"0.20313585674458502"},"roic_rank":{"0":2.0},"ey_rank":{"0":1.0},"sum_rank":{"0":3.0}},"1":{"company":{"1":"Microsoft Corporation"},"earnings_yield":{"1":"0.0360941393518613"},"roic":{"1":"0.1955875358727057"},"roic_rank":{"1":1.0},"ey_rank":{"1":2.0},"sum_rank":{"1":3.0}}}'
我通过pandas数据框运行json,并在其中对它们进行排序:
df = pd.DataFrame(companies)
df['roic_rank'] = df['roic'].rank()
df['ey_rank'] = df['earnings_yield'].rank()
df['sum_rank'] = df['ey_rank'] + df['roic_rank'].rank()
返回:
company earnings_yield roic roic_rank ey_rank sum_rank
0 Apple Inc 0.0322 0.1831 1.0 1.0 2.0
1 Microsoft Corporation 0.0361 0.1956 2.0 2.0 4.0
将已排序的表返回到前端,以便以升序/降序(在sum\u rank
上)的下拉列表形式很好地显示它的好方法是什么
如果我只做df.to_json()
,我所有关于熊猫的工作都会被扔出窗口,因为json是这样返回的:
[
{
"company": "Apple Inc",
"earnings_yield": "0.032220032460810885",
"roic": "0.18313585674458502"
},
{
"company": "Microsoft Corporation",
"earnings_yield": "0.0360941393518613",
"roic": "0.1955875358727057"
}
]
{
"company": {
"0": "Apple Inc",
"1": "Microsoft Corporation"
},
"earnings_yield": {
"0": 0.0322200325,
"1": 0.0360941394
},
"roic": {
"0": 0.1831358567,
"1": 0.1955875359
},
"roic_rank": {
"0": 1,
"1": 2
},
"ey_rank": {
"0": 1,
"1": 2
},
"sum_rank": {
"0": 2,
"1": 4
}
}
'{"0":{"company":{"0":"Apple Inc"},"earnings_yield":{"0":"0.032220032460810885"},"roic":{"0":"0.20313585674458502"},"roic_rank":{"0":2.0},"ey_rank":{"0":1.0},"sum_rank":{"0":3.0}},"1":{"company":{"1":"Microsoft Corporation"},"earnings_yield":{"1":"0.0360941393518613"},"roic":{"1":"0.1955875358727057"},"roic_rank":{"1":1.0},"ey_rank":{"1":2.0},"sum_rank":{"1":3.0}}}'
你可以试试groupby
json = df.groupby(level=0).apply(lambda x: x.to_dict(orient='records'))
json = json.to_json()
输出将如下所示:
[
{
"company": "Apple Inc",
"earnings_yield": "0.032220032460810885",
"roic": "0.18313585674458502"
},
{
"company": "Microsoft Corporation",
"earnings_yield": "0.0360941393518613",
"roic": "0.1955875358727057"
}
]
{
"company": {
"0": "Apple Inc",
"1": "Microsoft Corporation"
},
"earnings_yield": {
"0": 0.0322200325,
"1": 0.0360941394
},
"roic": {
"0": 0.1831358567,
"1": 0.1955875359
},
"roic_rank": {
"0": 1,
"1": 2
},
"ey_rank": {
"0": 1,
"1": 2
},
"sum_rank": {
"0": 2,
"1": 4
}
}
'{"0":{"company":{"0":"Apple Inc"},"earnings_yield":{"0":"0.032220032460810885"},"roic":{"0":"0.20313585674458502"},"roic_rank":{"0":2.0},"ey_rank":{"0":1.0},"sum_rank":{"0":3.0}},"1":{"company":{"1":"Microsoft Corporation"},"earnings_yield":{"1":"0.0360941393518613"},"roic":{"1":"0.1955875358727057"},"roic_rank":{"1":1.0},"ey_rank":{"1":2.0},"sum_rank":{"1":3.0}}}'
预期的json输出是什么?可能是
df.to_dict(“records”)
?一些带有对象数组的排序json,其中第一个元素是具有最低“sum_rank”的索引。您能解释一下这是如何工作的吗?理想情况下,我希望订单基于sum_秩。您的lambda在表中按索引对其进行排序?因此,即使我运行任何df=df.sort\u值(按class='sum\u rank')
或任何东西。索引将保持不变-不确定这是否解决了我的问题。好的,您可以将df的索引设置为sum_rank,然后对其应用groupbydf=df.set_index('sum_rank')
json=df.groupby(level=0)。apply(lambda x:x.to_dict(orient='records'))
json=json.to_json()
有关groupby引用,请参阅()