Pandas groupby для таблицы Excel - PullRequest
1 голос
/ 20 марта 2019

У меня есть электронная таблица, которая выглядит следующим образом (около 1800 строк), она сгенерирована из скрипта Python, извлекающего информацию из базы данных Access:

ID  Chemical            Association  Term 
1   1,1-Dichloroethene  exactMatch   1,1-Dichloroethylene
1   1,1-Dichloroethene  exactMatch   Vinylidene Chloride
2   1,2 Epoxyethane     exactMatch   Ethylene oxide  
2   1,2 Epoxyethane     exactMatch   Ethylene oxide (1,2 Epoxyethane)

Я хочу использовать, вероятно, панд для изменениямакет этой таблицы.Я хочу создать таблицу, подобную этой:

ID  Chemical            Association  Term                   (new column)
1   1,1-Dichloroethene  exactMatch   1,1-Dichloroethylene   Vinylidene Chloride   
2   1,2 Epoxyethane     exactMatch   Ethylene oxide (1...   Ethylene oxide 

Я уже написал следующее, используя панд, но не уверен, что делать дальше:

data = pd.read_excel('Chemicals_exactMatch.xlsx', sheet_name='Sheet1')
df = pd.DataFrame(data)
grp = df.groupby(['ID','Chemical','Association'])

Я предполагаю следующеезаявления должны быть включены в это, но я не уверен, как:

df.apply(lambda grouped: grouped['Term'].str.cat(sep="|"))
df.str.split(pat="|")

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Попробуйте это:

df.set_index(['ID',
              'Chemical',
              'Association',
              df.groupby(['ID','Chemical','Association']).cumcount()])['Term']\
  .unstack().reset_index()

Выход:

   ID            Chemical Association                     0                                 1
0   1  1,1-Dichloroethene  exactMatch  1,1-Dichloroethylene               Vinylidene Chloride
1   2     1,2 Epoxyethane  exactMatch        Ethylene oxide  Ethylene oxide (1,2 Epoxyethane)
0 голосов
/ 26 марта 2019

Мне удалось написать следующее, что работает:

data = pd.read_excel(spreadsheet, sheet_name='Sheet1')
df = (pd.DataFrame(data)
        .groupby(['ID','Chemical','Association'])
        .apply(lambda grouped: grouped['Term'].str.cat(sep="!"))
        .str.split(pat="!", expand=True)
        .sort_values('Chemical')
        .to_excel('Chemicals_exactMatch.xlsx'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...