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

最近要处理表格进行分析,由于没有处理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

阅读 3.5k
2 个回答

一、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参数负责升序和降序

问题一:

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)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题