Извлеченные ячейки формируются в новую строку с тем же именем столбца (чтение нескольких файлов) - PullRequest
2 голосов
/ 18 октября 2019

Я хочу найти значение c2-c5, основанное на строке b2-b5, и добавить в строки с фреймом данных.

Это пример данных, которые я использую.

..  2   3   4   5   6   7   8
0   a   b   c   d   e   f   g
1   a1  b1  c1  d1  e1  f1  g1
2   a2  b2  c2  d2  e2  f2  g2
3   a3  b3  c3  d3  e3  f3  g3
4   a4  b4  c4  d4  e4  f4  g4
5   a5  b5  c5  d5  e5  f5  g5

Код, который я пробовал: я должен поместить df.loc снаружи, так как значения заменяются.

data=[]
for file in files:
    df=pd.read_excel(file, header=None)
    df['Year'] = file.split('_')[0]
    df['Final'] = df.iat(1,1)
    df['Comments'] = df.iat(2,1)

    data.append(df)
 df1 = df.loc[df[3].isin(['b2','b3','b4','b5']),[3,4]].assign(year=file.split('.')[0]).assign(df['Year]....)

Я хочу, чтобы результат был таким:

1   2   3   4   5    year
.
.
.    .   . abc  def
.    .   .  b2  c2   2019 
.    .   .  b3  c3   2019
            b4  c4   2019
            b5  c5   2019
            b2  c2   2019 
            b3  c3   2019
            b4  c4   2019
            b5  c5   2019

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Что делать, если у меня разные годы и я хочу добавить больше разных столбцов?

 data=[]
    for file in files:
        df=pd.read_excel(file, header=None)
        df['Year']= filename.split('_')
        df = df.loc[df[3].isin(['b2','b3','b4','b5']),[3, 4]]
        data.append(df)

df = pd.concat(data, ignore_index=True)
0 голосов
/ 18 октября 2019

Идея состоит в том, чтобы отфильтровать все значения по Series.isin и добавить новый столбец year по DataFrame.assign с append каждый отфильтрованный DataFrames в список data и последнего использованияconcat:

data=[]
for file in files:
    df=pd.read_excel(file, header=None)
    df = df.loc[df[3].isin(['b2','b3','b4','b5']),[3, 4]].assign(year=file.split('.')[0])
    data.append(df)

df = pd.concat(data, ignore_index=True)

Тест с данными образца:

df = df.loc[df[3].isin(['b2','b3','b4','b5']),[3, 4]].assign(year=2019)
print (df)
    3   4  year
2  b2  c2  2019
3  b3  c3  2019
4  b4  c4  2019
5  b5  c5  2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...