Python Pandas操纵df并使用样式和链接创建excel

时间:2017-01-12 11:19:16

标签: python excel pandas dataframe

Q.1:GROUP SIMILAR ROWS

我有一个如下所示的数据框:

       TTL1    TTL2    TTL3
0      val1    val2    val3
1      val1    val2    val3
2      val1    val2    val3
3      val1    val2    val3
134    val1    val2    val3
135    val1    val2    val3
136    val1    val2    val3
205    val1    val2    val3

我想检查索引号是否成功(例如1,2,3或56,57,58等),如果是,则添加另一列以显示它们在同一组中,因此输出应该是:

       TTL1    TTL2    TTL3   GROUP_TTL
0      val1    val2    val3      0
1      val1    val2    val3      0
2      val1    val2    val3      0
3      val1    val2    val3      0
134    val1    val2    val3      1
135    val1    val2    val3      1
136    val1    val2    val3      1
205    val1    val2    val3      2

问题2:操作EXCEL文件:

现在对于我不确定可以在pandas和python中完成的部分:

我想为excel中的行着色,因此每组行都是相同的颜色。所以0组是绿色,1黄色等。

我还想在Excel工作表中添加链接到计算机上的其他Excel工作表。

是否可以使用pandas和python?

谢谢你!

2 个答案:

答案 0 :(得分:2)

您可以先使用to_series index转换为diff(尚未对index实施),然后比较值是否为1。获取boolean Series累积总和cumsum和最后减去1

df['GROUP_TTL'] = (df.index.to_series().diff() != 1).cumsum().sub(1)

print (df)
     TTL1  TTL2  TTL3  GROUP_TTL
0    val1  val2  val3          0
1    val1  val2  val3          0
2    val1  val2  val3          0
3    val1  val2  val3          0
134  val1  val2  val3          1
135  val1  val2  val3          1
136  val1  val2  val3          1
205  val1  val2  val3          2

着色:

#http://xlsxwriter.readthedocs.io/example_pandas_conditional.html
len_index = len(df.index) + 1
writer = pd.ExcelWriter('file.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=None)
workbook  = writer.book
worksheet = writer.sheets['Sheet1']
worksheet.conditional_format('D2:D'+str(len_index), {'type': '3_color_scale'})
writer.save()

答案 1 :(得分:2)

  

我还想在Excel工作表中添加链接到计算机上的其他Excel工作表。

这是可能的,请参阅文档的write_url()部分。例如:

# Link to a cell on the current worksheet.
worksheet.write_url('A1',  'internal:Sheet1!A1')

# Link to a cell on another worksheet.
worksheet.write_url('A2',  'internal:Sheet2!A1')

# Link to another Excel workbook.
worksheet.write_url('A3', r'external:c:\temp\foo.xlsx')

# Link to a worksheet cell in another workbook.
worksheet.write_url('A4', r'external:c:\foo.xlsx#Sheet2!A1')

# Link to a worksheet another workbook with a relative link.
worksheet.write_url('A5', r'external:..\foo.xlsx')

# Link to a worksheet another workbook with a network link.
worksheet.write_url('A6', r'external:\\NET\share\foo.xlsx')