我在Python3.x中有以下pandas DataFrame
import pandas as pd
key_dict = {"coordinates": ["AB1", "AB1", "AB1", "AB1", "AC1", "AC1", "AD1", ...], "start": [762, 23, 75, 98, 1274, 1587, 1991, ...], "end": [2481, 238, 340, 375, 1789, 1689, 2211, ...] }
df = pd.DataFrame(key_dict)
print(df)
coordinates start end
0 AB1 762 2481
1 AB1 23 238
2 AB1 75 340
3 AB1 98 375
4 AC1 1274 1789
5 AC1 1587 1689
6 AD1 1991 2211
... ... ...
现在,要将其转换为(嵌套的)字典很简单,例如
my_dict = df.to_dict()
print(my_dict)
{'coordinates': {0: 'AB1', 1: 'AB1', 2: 'AB1', 3: 'AB1', 4: 'AC1', 5: 'AC1', 6: 'AD1'},
'end': {0: 2481, 1: 238, 2: 340, 3: 375, 4: 1789, 5: 1689, 6: 2211},
'start': {0: 762, 1: 23, 2: 75, 3: 98, 4: 1274, 5: 1587, 6: 1991}}
列名是主词典的键,每个索引是子词词典的关键。
我更喜欢嵌套字典coordinates
中的唯一元素作为字典键,元素是值。
在上面的例子中,这将是:
{"AB1": {"start": [762, 23, 75, 98], "end":[2481, 238, 340, 375]},
"AC1":{"start": [1274, 1587], "end":[1789, 1689]}, "AD1":{"start": [1991], "end":[2211]}, ...}
不知何故,人们必须删除索引,并忽略第一列。
答案 0 :(得分:2)
稍微复杂的方法,但可以使用groupby
进行一些小数据框整形。
df = df.groupby('coordinates').agg(lambda x: x.values.tolist()).T
df
coordinates AB1 AC1 AD1
end [2481, 238, 340, 375] [1789, 1689] [2211]
start [762, 23, 75, 98] [1274, 1587] [1991]
df.to_dict()
{
"AC1": {
"start": [
1274,
1587
],
"end": [
1789,
1689
]
},
"AD1": {
"start": [
1991
],
"end": [
2211
]
},
"AB1": {
"start": [
762,
23,
75,
98
],
"end": [
2481,
238,
340,
375
]
}
}