pandas with csv file:显示一个降序计数列表,其中列1中的哪些项具有列2中3个特定项中最多的项

km0tfn4u  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(94)

我在这里尝试Pandas.我最近读到它是多么强大和有用,所以我给它一个尝试!尝试一些组合在这里和那里,我坚持这一个:
假设我有一个csv文件,它有以下两列:

名称:一个名称可以多次显示
食物:可以是香蕉、苹果、胡萝卜、celery 或土豆。

同一个人可以多次吃同一种食物。
该表看起来像这样:
| 名称|食品|
| --|--|
| 保罗|胡萝卜|
| 保罗|马铃薯|
| 保罗|苹果|
| 亚历克斯|香蕉|
| 亚历克斯|celery |
| 玛丽|马铃薯|
| 玛丽|苹果|
| 保罗|苹果|
| 卡尔|马铃薯|
| ......这是什么?|......这是什么?|
| 鲍勃|香蕉|
我需要一个从蔬菜最多的人到蔬菜最少的人的递减列表,沿着他们总共有多少蔬菜。
我得到的最接近的结果是下面的脚本,我试图只显示蔬菜:

import pandas as pd

df = pd.read_csv('foodcounter.csv')

s = df['name'].groupby(df['food']).value_counts()[['carrot','potato','celery']]

print(s.to_string())

字符串
输出如下所示:
| 食品|名称|计数|
| --|--|--|
| 胡萝卜|保罗| 43 |
| | 32 | 32 |
| | 13 | 13 |
| | ......这是什么?| ... |
| celery |保罗| 12 |
| | 3 | 3 |
| | 1 | 1 |
| | ......这是什么?| ... |
| 马铃薯|保罗| 33 |
| | 23 | 23 |
| | 14 | 14 |
我的目标输出是这样的(名称+从最大到最小的数量计数):
| 名称|计数|
| --|--|
| 保罗| 88 |
| 亚历克斯| 77 |
| 玛丽| 66 |
| ......这是什么?|......这是什么?|
| 卡尔| 16 |
| 鲍勃| 5 |
| 约翰| 1 |
你可以看到保罗吃的蔬菜最多,其次是亚历克斯和玛丽。
约翰的蔬菜最少。
保罗的总数是88。这是保罗所有的胡萝卜/土豆/celery 的总和。
亚历克斯、玛丽等也是如此。
我很确定我要么非常接近,要么我需要一个全新的方法。
让我知道:)
谢谢你,谢谢

gywdnpxw

gywdnpxw1#

除了你所做的,取s和:

s.groupby("name").sum().sort_values(ascending=False)

字符串

j8ag8udp

j8ag8udp2#

不久前我得到了它。我决定在这里分享代码!
我首先将所有蔬菜行移动到另一个名为foodcounter.csv的csv文件中:

import pandas as pd

df = pd.read_csv('foodcounter.csv')

df2 = (df["food"]=="carrots") | \
      (df["food"]=="porato") | \
      (df["food"]=="celery")

s = df[df2]

s.to_csv(r'vegetablesonly.csv', index = None, header=True)

字符串
使用新的csv文件,我使用这个命令来显示我需要的输出:

import pandas as pd

df = pd.read_csv('vegetablesonly.csv')

s = df['food'].value_counts()

print(s.to_string())

相关问题