我正在嘗試對熊貓資料框進行排序。每個單元格是兩個值的字典。一列的示例:
0 {'lat': 50.7392927, 'lon': 7.0950485}
1 {'lat': 51.423369, 'lon': 7.1495216}
2 {'lat': 50.7385629, 'lon': 7.0938597}
3 {'lat': 50.7394781, 'lon': 7.1001448}
4 {'lat': 52.2092612, 'lon': 8.7446132}
我正在嘗試通過遍歷框架對每一列進行排序,但是當我什至嘗試使用此代碼對單個列進行排序時:
sorted(df["name"], key=lambda d:d["lat"])
我收到錯誤:'float' object is not subscriptable。
編輯:我想要實作的輸出是按鍵“lat”的值排序的列:
0 {'lat': 50.7385629, 'lon': 7.0938597}
1 {'lat': 50.7392927, 'lon': 7.0950485}
2 {'lat': 50.7394781, 'lon': 7.1001448}
3 {'lat': 51.423369, 'lon': 7.1495216}
4 {'lat': 52.2092612, 'lon': 8.7446132}
我的猜測是,這只回傳一個浮點數而不是一個可以排序的浮點數串列。我當然可以遍歷整個 Dataframe 并構造每個列的串列以對其進行排序,但我認為可能有更好更快的解決方案。
最好的祝福
uj5u.com熱心網友回復:
如果你有這個資料框:
name position
0 john {'lat': 50.7392927, 'lon': 7.0950485}
1 rick {'lat': 51.423369, 'lon': 7.1495216}
2 jenny {'lat': 50.7385629, 'lon': 7.0938597}
3 mick {'lat': 50.7394781, 'lon': 7.1001448}
4 peter {'lat': 52.2092612, 'lon': 8.7446132}
"position"然后您可以通過執行按列排序"lat"(假設您在列中使用 Python 字典,而不是字串):
df = df.sort_values(by="position", key=lambda k: k.str["lat"])
print(df)
印刷:
name position
2 jenny {'lat': 50.7385629, 'lon': 7.0938597}
0 john {'lat': 50.7392927, 'lon': 7.0950485}
3 mick {'lat': 50.7394781, 'lon': 7.1001448}
1 rick {'lat': 51.423369, 'lon': 7.1495216}
4 peter {'lat': 52.2092612, 'lon': 8.7446132}
另一種方法:
print(df.iloc[sorted(df.index, key=lambda k: df.loc[k, "position"]["lat"])])
uj5u.com熱心網友回復:
也許您也可以transpose使用資料框并按“緯度”列排序sort_values(可選:并申請transpose回傳原始資料)
代碼:
#given dictionaries
a = {'lat': 50.7392927, 'lon': 7.0950485}
b = {'lat': 51.423369, 'lon': 7.1495216}
c = {'lat': 50.7385629, 'lon': 7.0938597}
d = {'lat': 50.7394781, 'lon': 7.1001448}
e = {'lat': 52.2092612, 'lon': 8.7446132}
df = pd.DataFrame({'1':pd.Series(a),
'2':pd.Series(b),
'3':pd.Series(c),
'4':pd.Series(d),
'5':pd.Series(e)})
#transposing rows and columns
df= df.transpose()
#sorting values by lat columns
df.sort_values('lat', ascending= False)
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/462152.html
標籤:python-3.x 数据框 排序 字典
上一篇:根據值過濾兩個陣列以洗掉重復項
