如何用python pandas处理以下不同类型的表格问题?

发布于 2022-09-11 16:46:58 字数 1738 浏览 18 评论 0

最近要处理表格进行分析,由于没有处理sql或csv的经验,遇到了以下问题,请求解决:

问题一:

companyID  fresh
23865      13-2
23866      10-3
23867      8-12

如何新建字段Dash,其数值是对fresh每行数据以'-'左右的数值进行大小判断,如果'-'的左边大于右边,则为1,否则为0,例如13-2为1,8-12为0.

问题二:

companyID  productID   A     B     C     D  
23865      1          3.6   3.0   4.0   5.0
23865      2          3.0   3.5   4.5   5.5
23865      3          3.6   3.2   4.2   5.3
23866      1          2.2   3.3   3.8   5.1
23866      2          3.2   3.4   4.4   5.6
23866      3          3.5   3.4   4.6   5.3
23866      4          4.2   4.2   5.3   5.8
23867      2          3.2   3.3   4.4   5.4
23867      3          3.6   3.5   4.6   5.4
23867      4          4.4   4.1   5.5   5.8

(1)、productID表示产品种类,其值对应的是型号A.B.C.D的价格,如何将表转化为一家公司只占一行,全部产品和型号对应的价格都放在这个公司的行中
(2)、和(1)不同的是,生成每家公司为一行的数据后,只要产品2、4的A,B,C,D四种型号的价格,其余的不要。
(3)、接着(2)的操作,将A,B,C,D四种型号的价格按升序和降序排列(此时对应的产品productID也需要跟着做调整)


感谢网友+大神:老瓜


data={'companyID':[23865,23865,23865,23866,23866,23866,23866,23867,23867,23867],'productID':[1,2,3,1,2,3,4,2,3,4],'A'[3.6,3.0,3.6,2.2,3.2,3.5,4.2,3.2,3.6,4.4],'B'[3.0,3.5,3.2,3.3,3.4,3.4,4.2,3.2,3.6,4.4],'C'[4.0,4.5,4.2,3.8,4.4,4.6,5.3,4.4,4.6,5.5],'D'[5.0,5.4,5.3,5.1,5.6,5.3,5.8,5.5,5.3,5.8]}
dd=pd.DataFrame(data)
dd

clipboard.png

clipboard.png


进一步的,
(4),假若某型号的价格缺失,想利用距离最近的两个同产品型号公司价格的平均值代替,怎么解决呢?例如:companyID为23866,productID为2,其型号D的价格缺失,按照上述表达应该为companyID为23865,productID为2,其型号D的价格5.3,加上companyID为23867,productID为2,其型号D的价格5.5的平均值,即为5.4

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如果没有你 2022-09-18 16:46:59

一、df['Dash'] = df['fresh'].apply(lambda x: 1 if x.split('-')[0] < x.split('-')[1] else 0)
二、

  1. df.groupby('companyID').agg(list)
  2. df[df['productID'].isin([2,4])].groupby('companyID').agg(list)
  3. df[df['productID'].isin([2,4])].groupby('companyID').agg(lambda x: sorted(list(x),reverse=True)) 加入sorted函数,reverse参数负责升序和降序
只是我以为 2022-09-18 16:46:59

问题一:

new_list = []
for index,row in df.iterrows():
    first_item, second_item = str(row["fresh"]).split("-")
    if int(first_item) > int(second_item):
        row["Dash"] = 1
    else:
        row["Dash"] = 0
    new_list.append(row)
    
new_df = pd.DataFrame(new_list)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文