我已将数据加载到pandas数据帧中,我的数据框中的一列具有如下值。我需要计算每个水果计数并将其值传递给数据提供者以绘制图形。
************************
Data in the Dataframe
************************
orange
apple
grapes
mango
orange
orange
orange
mango
apple
例如,我想以下面的格式将值传递给dataProvider。
"dataProvider": [{
"flavor": "orange",
"count": 4
}, {
"flavor": "apple",
"count": 2
}, {
"flavor": "grapes",
"count": 1
}, {
"flavor": "mango",
"count": 2
}],
基本上我想得到的是以上数据中的以下格式。
[{
"flavor": "orange",
"count": 4
}, {
"flavor": "apple",
"count": 2
}, {
"flavor": "grapes",
"count": 1
}, {
"flavor": "mango",
"count": 2
}]
答案 0 :(得分:3)
假设您的数据框df
,如下所示:
flavor
0 orange
1 apple
2 grapes
3 mango
4 orange
5 orange
6 orange
7 mango
8 apple
您可以在理解中使用pd.factorize
:
f, u = pd.factorize(df.flavor)
[dict(count=c, flavor=f) for c, f in zip(np.bincount(f), u)]
[{'count': 4, 'flavor': 'orange'},
{'count': 2, 'flavor': 'apple'},
{'count': 1, 'flavor': 'grapes'},
{'count': 2, 'flavor': 'mango'}]
或者,您可以使用pd.Series.value_counts
执行与factorize
和bincount
s = df.flavor.value_counts()
[dict(count=c, flavor=f) for c, f in zip(s.values, s.index)]
[{'count': 4, 'flavor': 'orange'},
{'count': 2, 'flavor': 'apple'},
{'count': 1, 'flavor': 'grapes'},
{'count': 2, 'flavor': 'mango'}]
答案 1 :(得分:2)
我认为需要groupby
size
或Series.value_counts
来计算,然后将索引转换为reset_index
列,最后通过{{转换为list of dict
s 3}}:
print (df)
flavor
0 orange
1 apple
2 grapes
3 mango
4 orange
5 orange
6 orange
7 mango
8 apple
d = df.groupby('flavor', sort=False).size().reset_index(name='count').to_dict('r')
print (d)
[{'count': 4, 'flavor': 'orange'},
{'count': 2, 'flavor': 'apple'},
{'count': 1, 'flavor': 'grapes'},
{'count': 2, 'flavor': 'mango'}]
d = (df['flavor'].value_counts(sort=False)
.rename_axis('flavor')
.reset_index(name='count')
.to_dict('r'))
print (d)
[{'count': 1, 'flavor': 'grapes'},
{'count': 2, 'flavor': 'apple'},
{'count': 2, 'flavor': 'mango'},
{'count': 4, 'flavor': 'orange'}]