相关疑难解决方法(0)

Python pandas groupby对象apply方法重复第一组

我的第一个问题:我对pandas(0.12.0-4)中groupby的apply方法的这种行为感到困惑,它似乎将函数TWICE应用于数据帧的第一行.例如:

>>> from pandas import Series, DataFrame
>>> import pandas as pd
>>> df = pd.DataFrame({'class': ['A', 'B', 'C'], 'count':[1,0,2]})
>>> print(df)
   class  count  
0     A      1  
1     B      0    
2     C      2
Run Code Online (Sandbox Code Playgroud)

我首先检查groupby函数是否正常,看起来没问题:

>>> for group in df.groupby('class', group_keys = True):
>>>     print(group)
('A',   class  count
0     A      1)
('B',   class  count
1     B      0)
('C',   class  count
2     C      2)
Run Code Online (Sandbox Code Playgroud)

然后我尝试在groupby对象上使用apply做类似的事情,我得到第一行输出两次:

>>> def checkit(group):
>>>     print(group)
>>> df.groupby('class', group_keys = True).apply(checkit)
  class  count
0     A      1
  class  count …
Run Code Online (Sandbox Code Playgroud)

python group-by pandas pandas-groupby

37
推荐指数
2
解决办法
8021
查看次数

对Pandas数据帧中的每一行只运行一次函数

如果我有一个功能

def do_irreversible_thing(a, b):
    print a, b
Run Code Online (Sandbox Code Playgroud)

还有一个数据帧

df = pd.DataFrame([(0, 1), (2, 3), (4, 5)], columns=['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

对于pandas数据帧中的每一行,只 运行一次函数的最佳方法是什么?正如其他问题指出的那样,像df.apply pandas这样的东西会在第一行调用该函数两次.即使使用numpy

np.vectorize(do_irreversible_thing)(df.a, df.b)
Run Code Online (Sandbox Code Playgroud)

导致函数在第一行被调用两次,df.T.apply()或者df.apply(...,axis = 1).

有没有比这个显式循环更快或更清晰的方法来调用每一行的函数?

   for idx, a, b in df.itertuples():
       do_irreversible_thing(a, b)
Run Code Online (Sandbox Code Playgroud)

python numpy function pandas

14
推荐指数
2
解决办法
1万
查看次数

Pandas函数:DataFrame.apply()运行顶行两次

我有一个函数的两个版本,Pandas用于逐行Python 2.7遍历inputs.csv.

第一个版本用于Series.apply()a single column,并按预期遍历每一行.

第二个版本使用DataFrame.apply()on multiple columns,由于某种原因,它读取顶行两次.然后继续执行其余的行而不重复.

任何想法为什么后者读取顶行两次?


版本#1 - Series.apply() (读取顶行一次)

import pandas as pd
df = pd.read_csv(inputs.csv, delimiter=",")

def v1(x):
    y = x
    return pd.Series(y)
df["Y"] = df["X"].apply(v1)
Run Code Online (Sandbox Code Playgroud)

版本#2 - DataFrame.apply() (读取顶行两次)

import pandas as pd
df = pd.read_csv(inputs.csv, delimiter=",")

def v2(f):
    y = f["X"]
    return pd.Series(y)
df["Y"] = df[(["X", "Z"])].apply(v2, axis=1)
Run Code Online (Sandbox Code Playgroud)

print y:

v1(x):            v2(f):

    Row_1         Row_1
    Row_2         Row_1
    Row_3         Row_2
                  Row_3
Run Code Online (Sandbox Code Playgroud)

python pandas

11
推荐指数
1
解决办法
3099
查看次数

标签 统计

pandas ×3

python ×3

function ×1

group-by ×1

numpy ×1

pandas-groupby ×1