Разобрать данные и сделать заголовок группы. Питон 3, панды

Я предлагаю вам использовать мини-сервер для запуска таких приложений на локальном хосте (если вы не используете какой-либо встроенный сервер).

Вот что очень просто настроить и запустить:

https://www.npmjs.com/package/tiny-server
1
задан Barbie 17 January 2019 в 00:41
поделиться

1 ответ

Вы можете заменить NaN для столбца '項目', проиндексировав исходный df и вызвав fillna , а затем отфильтровать строки, содержащие строку 'プレサンス', и перезаписать значения строк с помощью список пустых строк, во-первых мы shift строк на 1 вниз, поэтому он делает заголовок:

In[111]:

newFile = df1.shift(1)
newFile['項目'] = newFile['項目'].fillna(df.loc['クライアント名'])
newFile.loc[newFile['項目'].str.contains('プレサンス'),['数量','単位','単価', '金額']] = ['','','','']
newFile
Out[111]: 
                                     項目      金額 数量 単位   単価
1                        プレサンス ロジェ 和泉中央                   
2      Yahoo!リスティング 12月分 12/1〜12/31 YSS   91188  1  式  NaN
3        Yahoo!リマーケティング 12月分 12/1〜12/31   25649  1  式  NaN
4    Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31   13211  1  式  NaN
5          Googleリスティング 12月分 12/1〜12/31  131742  1  式  NaN
6        Googleリマーケティング 12月分 12/1〜12/31   35479  1  式  NaN
7    Googleディスプレイネットワーク 12月分 12/1〜12/31   18999  1  式  NaN
8                          プレサンス グラン 茨木                   
9      Yahoo!リスティング 12月分 12/1〜12/31 YSS  113373  1  式  NaN
10       Yahoo!リマーケティング 12月分 12/1〜12/31   28775  1  式  NaN
11   Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31   19010  1  式  NaN
12         Googleリスティング 12月分 12/1〜12/31  158389  1  式  NaN
13       Googleリマーケティング 12月分 12/1〜12/31   45530  1  式  NaN
14   Googleディスプレイネットワーク 12月分 12/1〜12/31   23224  1  式  NaN
15                         プレサンス ロジェ 江坂  

Теперь, когда вы хотите добавить отступы, чтобы сделать его более читабельным, мы может хранить местоположения индекса, где находятся итоговые значения, затем выполнять итерацию по ним и нарезать df, добавлять их к dict, а затем вызывать concat для вертикальной укладки дополненных фрагментов:

In[112]:

pos = newFile.index[newFile['項目'].str.contains('プレサンス')]
pos
Out[112]: Int64Index([1, 8, 15], dtype='int64')

Теперь создайте dict для каждого среза и добавьте пустую строку:

In[115]:

d = {}
i = 0
for p in pos:
    if p == pos[0]:
        d[p] = newFile.loc[:pos[i+1]-1].append(pd.Series('',newFile.columns), ignore_index=True)
    elif (i + 1) > len(pos) - 1:
        d[p] = newFile.loc[pos[i-1]+1:]
    else:
        d[p] = newFile.loc[p:pos[i+1]-1].append(pd.Series('',newFile.columns), ignore_index=True)
    i = i + 1
pd.concat(d, ignore_index=True)
Out[115]: 
                                     項目      金額 数量 単位   単価
0                        プレサンス ロジェ 和泉中央                   
1      Yahoo!リスティング 12月分 12/1〜12/31 YSS   91188  1  式  NaN
2        Yahoo!リマーケティング 12月分 12/1〜12/31   25649  1  式  NaN
3    Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31   13211  1  式  NaN
4          Googleリスティング 12月分 12/1〜12/31  131742  1  式  NaN
5        Googleリマーケティング 12月分 12/1〜12/31   35479  1  式  NaN
6    Googleディスプレイネットワーク 12月分 12/1〜12/31   18999  1  式  NaN
7                                                         
8                          プレサンス グラン 茨木                   
9      Yahoo!リスティング 12月分 12/1〜12/31 YSS  113373  1  式  NaN
10       Yahoo!リマーケティング 12月分 12/1〜12/31   28775  1  式  NaN
11   Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31   19010  1  式  NaN
12         Googleリスティング 12月分 12/1〜12/31  158389  1  式  NaN
13       Googleリマーケティング 12月分 12/1〜12/31   45530  1  式  NaN
14   Googleディスプレイネットワーク 12月分 12/1〜12/31   23224  1  式  NaN
15                                                        
16     Yahoo!リスティング 12月分 12/1〜12/31 YSS  113373  1  式  NaN
17       Yahoo!リマーケティング 12月分 12/1〜12/31   28775  1  式  NaN
18   Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31   19010  1  式  NaN
19         Googleリスティング 12月分 12/1〜12/31  158389  1  式  NaN
20       Googleリマーケティング 12月分 12/1〜12/31   45530  1  式  NaN
21   Googleディスプレイネットワーク 12月分 12/1〜12/31   23224  1  式  NaN
22                         プレサンス ロジェ 江坂  
0
ответ дан EdChum 17 January 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: