相关疑难解决方法(0)

Pandas - 如何在列中展平分层索引

我有一个数据框,在第1轴(列)中有一个分层索引(来自一个groupby.agg操作):

     USAF   WBAN  year  month  day  s_PC  s_CL  s_CD  s_CNT  tempf       
                                     sum   sum   sum    sum   amax   amin
0  702730  26451  1993      1    1     1     0    12     13  30.92  24.98
1  702730  26451  1993      1    2     0     0    13     13  32.00  24.98
2  702730  26451  1993      1    3     1    10     2     13  23.00   6.98
3  702730  26451  1993      1    4     1     0    12     13  10.04   3.92
4  702730  26451  1993      1    5     3     0    10     13  19.94  10.94
Run Code Online (Sandbox Code Playgroud)

我想扁平它,所以它看起来像这样(名字不重要 …

python dataframe pandas

266
推荐指数
12
解决办法
17万
查看次数

SpecificationError 的解决方案:在 agg() 和 groupby() 时不支持嵌套重命名器

def stack_plot(data, xtick, col2='project_is_approved', col3='total'):
    ind = np.arange(data.shape[0])

    plt.figure(figsize=(20,5))
    p1 = plt.bar(ind, data[col3].values)
    p2 = plt.bar(ind, data[col2].values)

    plt.ylabel('Projects')
    plt.title('Number of projects aproved vs rejected')
    plt.xticks(ind, list(data[xtick].values))
    plt.legend((p1[0], p2[0]), ('total', 'accepted'))
    plt.show()

def univariate_barplots(data, col1, col2='project_is_approved', top=False):
    # Count number of zeros in dataframe python: /sf/answers/3607836501/
    temp = pd.DataFrame(project_data.groupby(col1)[col2].agg(lambda x: x.eq(1).sum())).reset_index()

    # Pandas dataframe grouby count: /sf/answers/1356991401/
    temp['total'] = pd.DataFrame(project_data.groupby(col1)[col2].agg({'total':'count'})).reset_index()['total']

    temp['Avg'] = pd.DataFrame(project_data.groupby(col1)[col2].agg({'Avg':'mean'})).reset_index()['Avg']

    temp.sort_values(by=['total'],inplace=True, ascending=False)

    if top:
        temp = temp[0:top]

    stack_plot(temp, xtick=col1, col2=col2, col3='total')
    print(temp.head(5))
    print("="*50)
    print(temp.tail(5))

univariate_barplots(project_data, 'school_state', 'project_is_approved', False) …
Run Code Online (Sandbox Code Playgroud)

python aggregate pandas

28
推荐指数
3
解决办法
5万
查看次数

在pandas中为groupby的结果添加'count'列?

我认为这是一个相当基本的问题,但我似乎无法找到解决方案.

我有一个类似于以下的pandas数据帧:

import pandas as pd

df = pd.DataFrame({'A' : ['x','x','y','z','z'],
                   'B' : ['p','p','q','r','r']})
df
Run Code Online (Sandbox Code Playgroud)

这会创建一个这样的表:

    A   B
0   x   p
1   x   p
2   y   q
3   z   r
4   z   r
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个表,表示该数据帧中不同值的数量.所以我的目标是这样的:

    A   B   c
0   x   p   2
1   y   q   1
2   z   r   2
Run Code Online (Sandbox Code Playgroud)

但是,我无法找到正确的功能来实现这一目标.我试过了:

df.groupby(['A','B']).agg('count')
Run Code Online (Sandbox Code Playgroud)

这将生成一个包含3行(如预期)但没有"count"列的表.我不知道如何添加count计数列.有人能指出我正确的方向吗?

python pandas

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

熊猫:按多列分组后创建单个大小和总和列

我有一个数据框,我在其中对 3 列进行 groupby 并汇总数字列的总和和大小。运行代码后

df = pd.DataFrame.groupby(['year','cntry', 'state']).agg(['size','sum'])
Run Code Online (Sandbox Code Playgroud)

我得到如下内容:

数据帧的图像

现在我想从主列中拆分我的大小子列并仅创建单个大小的列,但希望将总和列保留在主列标题下。我尝试了不同的方法但没有成功。这些是我尝试过但无法让事情为我工作的方法:

如何按对象计算pandas中组中的行数?

将 Pandas GroupBy 对象转换为 DataFrame

如果有人可以帮助我解决这个问题,将不胜感激。

问候,

python pandas

4
推荐指数
1
解决办法
5808
查看次数

如何删除值频率小于 5 的行?蟒蛇,熊猫

我有一个包含很多行的数据框。有时,价值观是其中之一,对我的目的不是很有用。

如何从第 2 列和第 3 列的值出现不超过 5 次的地方删除所有行?

df 输入

 Col1     Col2     Col3       Col4
 1        apple    tomato     banana
 1        apple    potato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        grape    tomato     banana
 1        pear     tomato     banana
 1        lemon    tomato     banana
Run Code Online (Sandbox Code Playgroud)

输出

 Col1     Col2     Col3       Col4
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
2
解决办法
8513
查看次数

计算pandas groupby中匹配值的数量

我为商店创建了一个熊猫数据框

我有列 Transaction 和 Item_Type

import pandas as pd
data = {'Transaction':[1, 2, 2, 2, 3], 'Item_Type':['Food', 'Drink', 'Food', 'Drink', 'Food']}
df = pd.DataFrame(data, columns=['Transaction', 'Item_Type'])
Run Code Online (Sandbox Code Playgroud)
Transaction Item_Type
1           Food
2           Drink
2           Food
2           Drink
3           Food
Run Code Online (Sandbox Code Playgroud)

我正在尝试按交易分组并计算每笔交易的饮料数量,但找不到正确的语法来执行此操作。

df = df.groupby(['Transaction','Item_Type']).size()
Run Code Online (Sandbox Code Playgroud)

这种工作,但给了我一个多指数系列,我还不能弄清楚如何从中选择每笔交易的饮料。

1/Food   1
2/Drink  2
2/Food   1
3/Food   1
Run Code Online (Sandbox Code Playgroud)

这看起来很笨重 - 有更好的方法吗?

这个stackoverflow似乎最相似在pandas中向groupby的结果添加“计数”列?

python pandas

3
推荐指数
1
解决办法
149
查看次数

计算熊猫列中的重复次数

我有一列显示演出的票证ID的列,(每个家庭成员使用相同的票证ID)我想通过计算票证ID重复多少次来创建一个新的cloumn,即家庭人数。

ticketID
113796
2543
19950
382653
349211
3101297
PC 17562
113503
113503
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在自身汇总后加入数据框后,数据框中的列名称奇怪

当我总结一个数据框并将其重新加入原始数据框时,则在使用列名时遇到了麻烦。

这是原始数据框:

import pandas as pd

d = {'col1': ["a", "a", "b", "a", "b", "a"], 'col2': [0, 4, 3, -5, 3, 4]}
df = pd.DataFrame(data=d)
Run Code Online (Sandbox Code Playgroud)

现在,我计算一些统计数据并将其合并回:

group_summary = df.groupby('col1', as_index = False).agg({'col2': ['mean', 'count']})
df = pd.merge(df, group_summary, on = 'col1')
Run Code Online (Sandbox Code Playgroud)

数据框现在具有一些奇怪的列名:

df
Out: 
  col1  col2  (col2, mean)  (col2, count)
0    a     0          0.75              4
1    a     4          0.75              4
2    a    -5          0.75              4
3    a     4          0.75              4
4    b     3          3.00              2
5    b     3          3.00              2 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

标签 统计

pandas ×8

python ×8

aggregate ×1

dataframe ×1