社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何使用pandas和python 3计算数据帧中的唯一条目数[重复]

AndrewW • 4 年前 • 573 次点击  

我有一个数据帧,它被简化为一个名为filename的列(已经按顺序排序),其中包含一个文件名列表,这些文件名可以重复,也可以不重复。

例如

Filename
/dir1/dir2/abc.jpg
/dir1/dir2/abc.jpg
/dir1/dir2/def.jpg
/dir1/dir2/hij.jpg
/dir1/dir2/hij.jpg
/dir1/dir2/hij.jpg
/dir1/dir2/hij.jpg
/dir1/dir2/hij.jpg
/dir1/dir2/klm.jpg
/dir1/dir2/klm.jpg

使用Python3.6和Pandas,我试图为每个文件名获取事件的数量 输出应该是一个数据帧,示例如下

Filename        Instances
/dir1/dir2/abc.jpg  2
/dir1/dir2/def.jpg  1
/dir1/dir2/hij.jpg  5
/dir1/dir2/klm.jpg  2

我想出了一个办法,把它转换成一个列表,然后计数,但是我喜欢把它作为一个数据帧,因为它将被重新输入到一些机器学习中,然后转换成一个列表,然后再返回,这似乎是一条很糟糕的路要走

我试过像

df = df.groupby('FileName')
df.groupby(['FileName']).count()
df = df.groupby('FileName').nunique()

但似乎都没用。 数据帧在过去被定义为15列,它们已经被删除,代码如下

df = df.drop(['Column1Name', 'Column2Name',], axis=1)

上面的例子只删除了2列(为了简单起见),但是在实际生活中有14列被输入 所以,我想知道这个或者我没有发现一个名为quantity的新列(用来存储已计数的数量)是否与此有关。

任何帮助都将不胜感激

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43880
 
573 次点击  
文章 [ 1 ]  |  最新文章 4 年前
hygull
Reply   •   1 楼
hygull    5 年前

你可以这样试一试。

使用 pandas.dataframe.groupby()

>>> import pandas as pd
>>>
>>> s = """/dir1/dir2/abc.jpg
... /dir1/dir2/abc.jpg
... /dir1/dir2/def.jpg
... /dir1/dir2/hij.jpg
... /dir1/dir2/hij.jpg
... /dir1/dir2/hij.jpg
... /dir1/dir2/hij.jpg
... /dir1/dir2/hij.jpg
... /dir1/dir2/klm.jpg
... /dir1/dir2/klm.jpg"""
>>>
>>> filenames = s.split('\n')
>>> filenames
['/dir1/dir2/abc.jpg', '/dir1/dir2/abc.jpg', '/dir1/dir2/def.jpg', '/dir1/dir2/hij.jpg', '/dir1/dir2/hij.jpg', '/dir1/dir2/hij.jpg', '/dir1/dir2/hij.jpg', '/dir1/dir2/hij.jpg', '/dir1/dir2/klm.jpg', '/dir1/dir2/klm.jpg']
>>>
>>> df = pd.DataFrame(d)
>>> df
             Filename
0  /dir1/dir2/abc.jpg
1  /dir1/dir2/abc.jpg
2  /dir1/dir2/def.jpg
3  /dir1/dir2/hij.jpg
4  /dir1/dir2/klm.jpg
5  /dir1/dir2/klm.jpg
>>>
>>> d = {"Filename": filenames}
>>> df = pd.DataFrame(d)
>>>
>>> df
             Filename
0  /dir1/dir2/abc.jpg
1  /dir1/dir2/abc.jpg
2  /dir1/dir2/def.jpg
3  /dir1/dir2/hij.jpg
4  /dir1/dir2/hij.jpg
5  /dir1/dir2/hij.jpg
6  /dir1/dir2/hij.jpg
7  /dir1/dir2/hij.jpg
8  /dir1/dir2/klm.jpg
9  /dir1/dir2/klm.jpg
>>>
>>> groups = df.groupby('Filename').groups
>>> groups
{'/dir1/dir2/abc.jpg': Int64Index([0, 1], dtype='int64'), '/dir1/dir2/def.jpg': Int64Index([2], dtype='int64'), '/dir1/dir2/hij.jpg': Int64Index([3, 4, 5, 6, 7], dtype='int64'), '/dir1/dir2/klm.jpg': Int64Index([8, 9], dtype='int64')}
>>>
>>> instances = []
>>> filenames = []
>>>
>>> for group in groups:
...     instances.append(len(groups[group]))
...     filenames.append(group)
...
>>> df = pd.DataFrame({"Filename": filenames, "Instances": instances})
>>> df
             Filename  Instances
0  /dir1/dir2/abc.jpg          2
1  /dir1/dir2/def.jpg          1
2  /dir1/dir2/hij.jpg          5
3  /dir1/dir2/klm.jpg          2
>>>