格式化Pandas Dataframe以绘制图形

时间:2018-03-14 15:07:47

标签: python pandas

我已将数据加载到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
  }]

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执行与factorizebincount

类似的任务
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 sizeSeries.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'}]