GVKun编程网logo

python itertools.groupby

3

本文将分享pythonitertools.groupby的详细内容,此外,我们还将为大家带来关于as_index=False时,groupby.first,groupby.nth,groupby.he

本文将分享python itertools.groupby的详细内容,此外,我们还将为大家带来关于as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别、df.groupby.apply(join)与df.groupby.agg(join)的输出差异、Groupby.mean 和 Groupby.std 使用连接数据框中的索引号、itertools groupby 中没有出现值 - python的相关知识,希望对你有所帮助。

本文目录一览:

python itertools.groupby

python itertools.groupby

实际例子

输入:$ cat data.in

01	25
02	24
13	13
13	13
14	12
25	01
25	01

输出: $ cat data.in | python map-reduce.py

read_input <generator object read_input at 0x1041a61e0>
01 [''01'', ''25''] <itertools._grouper object at 0x10417bed0>
02 [''02'', ''24''] <itertools._grouper object at 0x10417bf10>
13 [''13'', ''13''] <itertools._grouper object at 0x10417bed0>
13 [''13'', ''13''] <itertools._grouper object at 0x10417bed0>
14 [''14'', ''12''] <itertools._grouper object at 0x10417bf10>
25 [''25'', ''01''] <itertools._grouper object at 0x10417bed0>
25 [''25'', ''01''] <itertools._grouper object at 0x10417bed0>

$ cat map-reduce.py (以下代码来自网络 http://www.cnblogs.com/joyeecheung/p/3757915.html)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Some description here...
"""

import sys
from operator import itemgetter
from itertools import groupby


def read_input(file):
    """Read input and split."""
    for line in file:
        yield line.rstrip().split(''\t'')


def main():
    data = read_input(sys.stdin)
    print "read_input", data
    for key, kviter in groupby(data, itemgetter(0)):
        # some code here..
        for k in kviter:
            print key, k, kviter


if __name__ == "__main__":
    main()

函数分析

https://stackoverflow.com/questions/8116666/itertools-groupby/15250161

help(''itertools'')

groupby(iterable[, keyfunc]) --> sub-iterators grouped by value of keyfunc(v)

help(''operator'')

class itemgetter(__builtin__.object)
 |  itemgetter(item, ...) --> itemgetter object
 |
 |  Return a callable object that fetches the given item(s) from its operand.
 |  After f = itemgetter(2), the call f(r) returns r[2].
 |  After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3])

as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别

as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别

编辑: 我在np.nan@ coldspeed,@ wen-ben,@
ALollz指出的字符串中犯的菜鸟错误。答案非常好,因此我不会删除此问题以保留这些答案。

原文:
我已经阅读了这个问题/答案[groupby.first()和groupby.head(1)有什么区别?

该答案说明差异在于处理NaN价值上。但是,当我打电话给groupbyas_index=False,他们俩都选择了NaN

此外,Pandas具有groupby.nth与和类似的功能head,并且first

有什么差异groupby.first(), groupby.nth(0), groupby.head(1)as_index=False

下面的例子:

In [448]: dfOut[448]:   A       B0  1  np.nan1  1       42  1      143  2       84  2      195  2      12In [449]: df.groupby(''A'', as_index=False).head(1)Out[449]:   A       B0  1  np.nan3  2       8In [450]: df.groupby(''A'', as_index=False).first()Out[450]:   A       B0  1  np.nan1  2       8In [451]: df.groupby(''A'', as_index=False).nth(0)Out[451]:   A       B0  1  np.nan3  2       8

我看到`firs()’重置了索引,而其他2则没有。除此之外,还有什么区别吗?

答案1

小编典典

主要问题是您可能''np.nan''存储了字符串,而不是真正的null值。以下是这三个null值的不同处理方式:

样本数据:

import pandas as pddf = pd.DataFrame({''A'': [1,1,2,2,3,3], ''B'': [None, ''1'', np.NaN, ''2'', 3, 4]})

first

这将返回每个组中的第一个非空值。奇怪的是它不会跳过None,尽管可以通过kwarg来实现dropna=True。因此,
您可能会返回原来属于不同行的列的值

df.groupby(''A'', as_index=False).first()#   A     B#0  1  None#1  2     2#2  3     3df.groupby(''A'', as_index=False).first(dropna=True)#   A  B#0  1  1#1  2  2#2  3  3

head(n)

返回组中的前n行。 值保持在行内 。如果您给它的n行数超过了行数,它将返回该组中的所有行而不会抱怨:

df.groupby(''A'', as_index=False).head(1)#   A     B#0  1  None#2  2   NaN#4  3     3df.groupby(''A'', as_index=False).head(200)#   A     B#0  1  None#1  1     1#2  2   NaN#3  2     2#4  3     3#5  3     4

nth

这占用了nth行,因此 再次 保持在row内
.nth(0)与相同.head(1),但用途不同。例如,如果您需要第0行和第2行,则很难做到.head(),而使用则容易.nth([0,2])。同样,它.head(10)比容易编写.nth(list(range(10))))

df.groupby(''A'', as_index=False).nth(0)#   A     B#0  1  None#2  2   NaN#4  3     3

nth 还支持删除具有任何空值的行,因此您可以使用它返回不包含任何空值的第一行,这与 .head()

df.groupby(''A'', as_index=False).nth(0, dropna=''any'')#   A  B#A      #1  1  1#2  2  2#3  3  3

df.groupby.apply(join)与df.groupby.agg(join)的输出差异

df.groupby.apply(join)与df.groupby.agg(join)的输出差异

如何解决df.groupby.apply(join)与df.groupby.agg(join)的输出差异?

我是Pandas的新手,目前正在学习groupby.agg()和groupby.apply()。以为我已经了解了,直到遇到以下输出为止。

Python版本3.7.3 Pandas版本0.24.2

数据框

In [46]: rng = np.random.RandomState(0)
    ...: df = pd.DataFrame({''key'': [''A'',''B'',''C'',''A'',''C''],...: ''data1'': [0,1,2,4,5],...: ''data2'': rng.randint(0,10,6)},...: columns = [''key'',''data1'',''data2''])

In [47]: df
Out[47]: 
  key  data1  data2
0   A      0      5
1   B      1      0
2   C      2      3
3   A      0      3
4   B      4      7
5   C      5      9

输出

In [50]: df.groupby(''key'').agg(lambda x: '',''.join(x.astype(str)))
Out[50]: 
    data1 data2
key            
A     0,0   5,3
B     1,4   0,7
C     2,5   3,9

In [49]: df.groupby(''key'').apply(lambda x: '',''.join(x.astype(str)))
Out[49]: 
key
A    key,data1,data2
B    key,data2
C    key,data2
dtype: object

我的问题是:

  1. 在上述情况下,为什么使用groupby.apply()和groupby.agg()在输出上会有区别?
  2. 为什么groupby.apply()方法提取列标题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Groupby.mean 和 Groupby.std 使用连接数据框中的索引号

Groupby.mean 和 Groupby.std 使用连接数据框中的索引号

如何解决Groupby.mean 和 Groupby.std 使用连接数据框中的索引号

我连接了两个数据帧,它们包含相同数量的行和列,对应于具有多个变量的 384 个时间点。因此,新数据帧包含 2 * 384 个索引号,我想用它来连接新数据帧或同一数据帧中的选定变量,方法是取每两个对应索引号的均值和标准差。

索引 变量X
0 值 A
384 Y 值
0 Aa 值
384 值 Yy

从上面的“数据框”中,我想获得值 A 和 Aa 以及值 Y 和 Yy 的均值和标准差(相同或新数据框中的 4 个新列,但对于更多列的所有 384 个值) /变量)。

我查看了可以计算均值和 st.dev 的 df.groupby,但我不知道如何使用索引值来计算,而且我也不确定这是否是一个好的解决方案?另一种方法可能是后退一步,而不是连接两个原始数据帧?很高兴听到一些关于如何解决这个问题的想法..谢谢

itertools groupby 中没有出现值 - python

itertools groupby 中没有出现值 - python

如何解决itertools groupby 中没有出现值 - python

我正在尝试使用 python - itertools.groupby 对字符串中的值进行分组。我曾尝试使用此代码:

for key,values in itertools.groupby(s):
    print(key,list(values))

我得到这个输出:

a [''a'']
b [''b'']
a [''a'',''a'']
b [''b'',''b'',''b'']
c [''c'']

这很好。但是当我添加一个 if 条件并将代码更改为这种方式时:

out = ''''
for key,values in itertools.groupby(s):
    if len(list(values))==1:
        out+=key
    else:
        out += key
        out += str(len(list(values)))
    print(key,list(values))

我得到这个输出:

a []
b []
a []
b []
c []

我不知道为什么列表是空的

解决方法

values 是一个迭代器,在它用完之前你只能对它调用一次 list()。您应该将该结果保存在一个变量中并重复使用它。

out = ''''
for key,values in itertools.groupby(s):
    value_list = list(values)  # values iterator exhausted here,can''t use it again
    if len(value_list)==1:
        out+=key
    else:
        out += key
        out += str(len(value_list))
    print(key,value_list)

今天关于python itertools.groupby的分享就到这里,希望大家有所收获,若想了解更多关于as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别、df.groupby.apply(join)与df.groupby.agg(join)的输出差异、Groupby.mean 和 Groupby.std 使用连接数据框中的索引号、itertools groupby 中没有出现值 - python等相关知识,可以在本站进行查询。

本文标签: