在Pandas,我的一个专栏" ID_Name"由一系列字典组成,格式如下:
[{'id': 10, 'name': 'Anna'}, {'id': 15, 'name': 'Bob'}, {'id': 20, 'name': 'Charlie'}, {'id': 25, 'name': 'Donald'} ]
另外,我有一个名为" AVG_INCOME"的平均收入列。让我们说这四个人的平均收入是100000.
如何使用以下格式创建新的词典列表:
[{'Anna': '100000' }, {'Bob': '100000' }, {'Charlie': '100000' }, {'Donald': '100000'}]
答案 0 :(得分:0)
您的数据框设置方式:
AVG_INCOME ID_Name
0 10000 {u'id': 10, u'name': u'Anna'}
1 10000 {u'id': 15, u'name': u'Bob'}
2 10000 {u'id': 20, u'name': u'Charlie'}
3 10000 {u'id': 25, u'name': u'Donald'}
虽然在数据框中的列中包含字典会让人感到困惑和低效。我就是这样做的:
import pandas as pd
id_name = [{'id': 10, 'name': 'Anna'},
{'id': 15, 'name': 'Bob'},
{'id': 20, 'name': 'Charlie'},
{'id': 25, 'name': 'Donald'}]
avg_income = [10000] * 4
df = pd.DataFrame(id_name)
df['AVG_INCOME'] = pd.Series(avg_income)
print df
输出:
id name AVG_INCOME
0 10 Anna 10000
1 15 Bob 10000
2 20 Charlie 10000
3 25 Donald 10000
完成数据框设置后所需的代码行
print dict(zip(df['name'], df['AVG_INCOME']))
# {'Charlie': 10000L, 'Bob': 10000L, 'Donald': 10000L, 'Anna': 10000L}
答案 1 :(得分:0)
一种方法是使用pd.Series.map
和lambda
函数来提取名称。
然后使用dict(zip(keys, values))
构造来创建词典。
df = pd.DataFrame({'ID_Name': [{'id': 10, 'name': 'Anna'},
{'id': 15, 'name': 'Bob'},
{'id': 20, 'name': 'Charlie'},
{'id': 25, 'name': 'Donald'}],
'AVG_INCOME': [10000]*4})
res = dict(zip(df['ID_Name'].map(lambda x: x['name']), df['AVG_INCOME']))
# {'Anna': 10000, 'Bob': 10000, 'Charlie': 10000, 'Donald': 10000}
但是,您应该尝试重构构建数据框的方式。例如,如果您有json输入,则应该可以为id
添加一列,为name
添加一列。使用带有数据帧的字典效率很低。
答案 2 :(得分:-1)
尝试下面,其中数据是DF的名称
.matrix {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: auto;
}
.matrix>span {
padding: 20px 0;
text-align: center;
}
答案 3 :(得分:-1)
ID_Name = [{'id': 10, 'name': 'Anna'},
{'id': 15, 'name': 'Bob'},
{'id': 20, 'name': 'Charlie'},
{'id': 25, 'name': 'Donald'} ]
AVG_INCOME = [1000, 1000, 1000, 1000]
ID_income = [ {ID_Name[i]['name']:AVG_INCOME[i]} for i in range(0,
len(ID_Name))]
ID_income
>[{'Anna': 1000}, {'Bob': 1000}, {'Charlie': 1000}, {'Donald': 1000}]