根据特定列中的值计算行数,从现有的数据帧创建新的数据帧。

12 浏览
0 Comments

根据特定列中的值计算行数,从现有的数据帧创建新的数据帧。

我有一个数据框如下所示,\n

|order_id|customername|product_count|
|1       |a          |2            |
|2       |b          |-1           |
|3       |Q          |3            |
|4       |a          |-1           |
|5       |c          |-1           |
|6       |Q          |-1           |
|7       |d          |-1           |

\n我想要的是另一个数据框,其中包含customername为\'Q\'的行数和customername中其他项目的行数。如下所示,其中test2代表\'Q\',test1代表其他项目。百分比列为(总请求数/ customername的计数)* 100,在这种情况下为(5/7)* 100和(2/7)* 100\n|用户|总请求数|百分比|\n|test1 |5 | 71.4 |\n|test2 |2 | 28.5 |\n

0
0 Comments

问题的出现原因是想要在现有的DataFrame中根据特定列的值进行计数,并将计数结果创建为新的DataFrame。解决方法是使用pandas的Series.value_counts函数比较列'customername'中的值,并重命名索引的值,然后创建新的DataFrame。在这个解决方案中,还需要添加一个名为'Percentage'的新列。

解决方法如下:

1. 首先,创建原始的DataFrame,包含三列'order_id'、'customername'和'product_count'。

2. 使用df['customername'].eq('Q').value_counts()函数比较列'customername'中的值是否等于'Q',并计算每个结果的计数。

3. 使用rename函数修改计数结果的索引值,将True重命名为'test2',将False重命名为'test1'。

4. 使用rename_axis函数为计数结果的索引名称命名为'users',并使用reset_index函数将计数结果转换为DataFrame,并命名为'Total request'。

5. 使用df1['Total request'].div(df1['Total request'].sum()).mul(100).round(2)计算百分比,并将结果添加为新的一列'Percentage'。

6. 打印输出新的DataFrame,其中包含'users'、'Total request'和'Percentage'三列。

如果想要添加额外的列,比如'Percentage',只需在第4步和第5步之间添加以下代码:

df1['Percentage'] = df1['Total request'].div(df1['Total request'].sum()).mul(100).round(2)

如果出现'KeyError: 'Total request''的错误,可能是由于在使用df1['Total request']时出现了问题。可以检查是否正确创建了df1,即是否使用了df1 = s.rename_axis('users').reset_index(name='Total request')的代码。

最后,通过测试数据来验证解决方案是否有效。

0