我有一个问题,在这个例子中简化了。考虑这个熊猫数据帧,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
有人对此有一个优雅的解决方案吗?
您可以通过将添加到_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
您在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: