首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中重塑这个DataFrame?

如何在Python中重塑这个DataFrame?
EN

Stack Overflow用户
提问于 2018-07-08 01:57:56
回答 2查看 69关注 0票数 3

我在Python语言中有一个DataFrame df_sale,我想对它进行整形,计算price列的和,然后添加一个新的列total。下面是df_sale

代码语言:javascript
复制
b_no  a_id  price  c_id
120   24     50     2
120   56     100    2
120   90     25     2
120   45     20     2
231   89     55     3
231   45     20     3
231   10     250    3

整形后的异常输出:

代码语言:javascript
复制
b_no  a_id_1  a_id_2  a_id_3  a_id_4  total  c_id
120   24      56      90      45      195    2
231   89      45      10      0       325    3

到目前为止,我尝试的是将df_sale['price']上的sum()分别用于120231。我不明白我应该如何重塑数据,添加新的列标题,并在计算效率不低的情况下获得总计。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-08 02:08:14

这可能不是最干净的方法(一点也不),但它得到了您想要的结果:

代码语言:javascript
复制
reshaped_df = (df.groupby('b_no')[['price', 'c_id']]
               .first()
               .join(df.groupby('b_no')['a_id']
                     .apply(list)
                     .apply(pd.Series)
                     .add_prefix('a_id_'))
               .drop('price',1)
               .join(df.groupby('b_no')['price'].sum().to_frame('total'))
               .fillna(0))


>>> reshaped_df
      c_id  a_id_0  a_id_1  a_id_2  a_id_3  total
b_no                                             
120      2    24.0    56.0    90.0    45.0    195
231      3    89.0    45.0    10.0     0.0    325
票数 2
EN

Stack Overflow用户

发布于 2018-07-08 02:45:12

您可以通过b_noc_id、对total求和以及对a_id进行展平来实现此分组

代码语言:javascript
复制
import pandas as pd

d = {"b_no":  [120,120,120,120,231,231, 231],
     "a_id":  [24,56,90,45,89,45,10],
     "price": [50,100,25,20,55,20,250],
     "c_id":  [2,2,2,2,3,3,3]}

df = pd.DataFrame(data=d)

df2 = df.groupby(['b_no', 'c_id'])['a_id'].apply(list).apply(pd.Series).add_prefix('a_id_').fillna(0)

df2["total"] = df.groupby(['b_no', 'c_id'])['price'].sum()

代码语言:javascript
复制
print(df2)

           a_id_0  a_id_1  a_id_2  a_id_3  total
b_no c_id                                       
120  2       24.0    56.0    90.0    45.0    195
231  3       89.0    45.0    10.0     0.0    325
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51225683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档