当前位置: 首页 > 知识库问答 >
问题:

将一个DataFrame分组为一个新的DataFrame,其中arange作为索引[重复]

江丰羽
2023-03-14

我有一个问题,在这个例子中简化了。考虑这个熊猫数据帧,df_a:

df_a=pd.DataFrame([['1001',34.3,'red'],['1001',900.04,'red'],['1001',776,'red'],['1003',18.95,'green'],['1004',321.2,'blue']],columns=['id','amount','name'])

    id      amount  name
0   1001    34.30   red
1   1001    900.04  red
2   1001    776.00  red
3   1003    18.95   green
4   1004    321.20  blue

我想通过将数量相加到一个新的数据框中,并创建一个新的类似于“arange”的索引来对这个数据框进行分组。这应该是我想要的结果:

    id      amount
0   1001    1710.34
1   1003    18.95
2   1004    321.20

但是我的努力创建了一个系列(我希望一个数据帧作为结果):

df_a.groupby(['id'])['amount'].sum()

id
1001    1710.34
1003      18.95
1004     321.20
Name: amount, dtype: float64

或者基于id列创建新索引:

pd.DataFrame(df_a.groupby(['id'])['amount'].sum())

        amount
id  
1001    1710.34
1003    18.95
1004    321.20

我还尝试传递index参数,但这也不起作用:

pd.DataFrame(df_a.groupby(['id'])['amount'].sum(),index=df_a.index.values)

   amount
0   NaN
1   NaN
2   NaN
3   NaN
4   NaN

有人对此有一个优雅的解决方案吗?

共有2个答案

闽朝
2023-03-14

您可以通过将添加到_frame()重置_index()来尝试以下操作:

new_df = df_a.groupby(['id'])['amount'].sum().to_frame('amount').reset_index()
print(new_df)

结果:

     id   amount
0  1001  1710.34
1  1003    18.95
2  1004   321.20

如果只使用to_frame(),即使用

df_a.groupby(id)[金额]. sum().to_frame(金额)

它将保持id上的索引如下:

      amount
id           
1001  1710.34
1003    18.95
1004   321.20

另一种方法是在上述代码中重置数据帧上的索引

new_df=pd.DataFrame(df_a.groupby(['id'])['amount'].sum()).reset_index()

输出与上述相同:

     id   amount
0  1001  1710.34
1  1003    18.95
2  1004   321.20
何禄
2023-03-14

您在groupby中有一个参数作为该参数的索引

df_a.groupby('id', as_index = False)['amount'].sum()

你得到

    id  amount
0   1001    1710.34
1   1003    18.95
2   1004    321.20
 类似资料:
  • 问题内容: 我正在尝试仅使用来自多索引DataFrame的一个索引来创建新的DataFrame。 理想情况下,我想要这样的事情: 和: 本质上,我想删除除level之外的多索引的所有其他索引。是否有捷径可寻? 问题答案: 一种方法是简单地重新绑定到所需的MultiIndex级别。您可以通过指定要保留的标签名称来做到这一点: 或使用级别的整数值: MultiIndex的所有其他级别将在此处消失。

  • 我正在使用齐柏林飞艇0.6.2和火花2.0。 我尝试在循环中执行查询,但效果不是很好。 我需要循环一个数据帧的每一行,大约5000行,并执行一个查询,这将在另一个数据帧中增加一个值。 以下是我的尝试: 我试着从两个数据帧中提取一小部分,但仍然很慢。我觉得我做得不对。 知道如何快速更新数据帧吗?

  • 谢谢,有用。但是我有什么办法可以去掉多余的“,”吗?这是由于列中存在空白值造成的。有没有一种方法可以不接受那些有空白值的列?它现在显示的是: 我多么想要它:

  • 假设我们有这样一个数据frame: 我们还有另一个具有相同行数和列数(具有相同名称)的DataFrame: 我不知道如何创建另一个由和组成的DataFrame,使其看起来像下面的DataFrame(可能有两个索引级别): 阅读基于列标签在pandas中重新塑造dataframes并从多个dict创建一个pandas DataFrame,这给了我一些见解(因为我也试图通过以下方法来实现:首先将原始d

  • 我有一个具有如下模式的dataframe: