如何使用python根据列匹配数据对行进行排序?

时间:2018-11-15 04:41:10

标签: python excel sorting

我有下面的表格,我想按预期的输出排序如下。如何使用Python执行。表格是Excel / csv格式。 ?

enter image description here

我想将column1数据与Column2数据进行匹配,并希望添加具有如下所示排序数据的新2列(5&6)。

enter image description here

如何使用python执行上述操作?

2 个答案:

答案 0 :(得分:2)

您的问题似乎正在尝试做两件事:

  1. 将excel中的数据读取到python程序中。
  2. 在python中处理数据。

对于#1,您可以使用类似Python's xlrd的东西,或者还有其他几个xls(x)解析器。

我将从此开始,看看是否可以将数据导入python。看起来像这样:

import xlrd

# open your workbook
wb = xlrd.open_workbook('mybook.xlsx')
sh = wb.sheet_by_index(0)

# now go through the rows and do what you want with them
for x in range(sh.nrows):
    for y in range(sh.ncols):
        value = sh.cell(x,y).value
        # and do something with this value.

我希望以上内容能帮助您开始进行以上操作。

答案 1 :(得分:2)

其中一种方法如下,

根据您的逻辑创建一个空的数据框并附加匹配的列值

将创建的数据框与原始数据框合并。

我已尝试使用您的示例数据,并按以下步骤操作:

import pandas as pd
dat = pd.read_excel(<location_to_file>) # Reading excel in to pandas
dat = pd.DataFrame(dat) # Converting to a pandas dataframe
dat1 = pd.DataFrame([])
for n in range(dat.shape[0]):
    for m in range(dat.shape[0]):
        if dat['Col1'][n] == dat['Col2'][m]:
            dat1 = dat1.append(pd.DataFrame({'Column5': dat.iloc[m][2], 'Column6': dat.iloc[m][3]}, index=[0]), ignore_index=True)
# print(dat1)
df = pd.concat([dat, dat1], axis=1)
print(df)

输入(作为数据框):

  Col1 Col2     Col3  Col4
0  ABC  DEF       12  DGMN
1  PQR  MNO       17  DGSD
2  DEF  JPG   United  DGFS
3  JPG  PQR     21Hi  DFPR
4  SQL  STF      STM  DGBC
5  PQR  YZW  Hello90  DGSF
6  MNO  ABC      DQT  DGCV
7  STF  SQL     A18B  DGFD

中间/临时数据帧:

  Column5 Column6
0     DQT    DGCV
1    21Hi    DFPR
2      12    DGMN
3  United    DGFS
4    A18B    DGFD
5    21Hi    DFPR
6      17    DGSD
7     STM    DGBC

输出(df):

  Col1 Col2     Col3  Col4 Column5 Column6
0  ABC  DEF       12  DGMN     DQT    DGCV
1  PQR  MNO       17  DGSD    21Hi    DFPR
2  DEF  JPG   United  DGFS      12    DGMN
3  JPG  PQR     21Hi  DFPR  United    DGFS
4  SQL  STF      STM  DGBC    A18B    DGFD
5  PQR  YZW  Hello90  DGSF    21Hi    DFPR
6  MNO  ABC      DQT  DGCV      17    DGSD
7  STF  SQL     A18B  DGFD     STM    DGBC

尽管可以通过对操作进行矢量化来进一步改善此代码段的性能。希望这可以帮助您入门。

注意 请显示您在解决/解决发布问题方面的研究成果。那会激励SO成员帮助您。