добавить каждое значение из цикла for в ячейку столбца в кадре данных pandas - PullRequest
0 голосов
/ 12 сентября 2018

Я разбил информационный кадр на два на основе условия.Я преобразовал столбец «ItemName» из обоих фреймов данных в список.

Я попытался использовать difflib для приблизительного сопоставления строк между двумя столбцами, по одному в каждом из этих фреймов данных, оба из которых назывались ItemName.Я хотел бы присоединить список с именем 'matchlist' в качестве столбца к исходному фрейму данных, или, с другой стороны, было бы хорошо, если бы я мог добавить каждый вывод цикла for в новый столбец в исходном фрейме данных.

source = list(datadf['ItemName'])
destination = list(datadf['ItemName'])

matchlist = []
for i in source:
    x = difflib.get_close_matches(i, destination, 3, 0.6)
    matchlist.append(x)

Я пробовал объединять и объединять параметры в пандах, но без каких-либо ошибок во вновь добавленных столбцах отображались только значения NaN.Оба столбца с именем ItemName содержат только строковые значения.

Может кто-нибудь помочь с идеей, как это исправить?

1 Ответ

0 голосов
/ 12 сентября 2018

Я считаю, что нужно назначить список обратно:

datadf['new'] = matchlist

Или использовать понимание списка вместо решения цикла:

datadf = pd.DataFrame({
    'ItemName': ['as','asds','as','aa','ssb','ab','sb']
})
print (datadf)
  ItemName
0       as
1     asds
2       as
3       aa
4      ssb
5       ab
6       sb

#convert to list is not necessary
L = datadf['ItemName']
datadf['new'] = [difflib.get_close_matches(i, L, 3, 0.6) for i in L]
print (datadf)
  ItemName             new
0       as  [as, as, asds]
1     asds  [asds, as, as]
2       as  [as, as, asds]
3       aa            [aa]
4      ssb       [ssb, sb]
5       ab            [ab]
6       sb       [sb, ssb]

РЕДАКТИРОВАТЬ:

Если необходимо проверить между 2 столбцамиразных фреймов данных:

datadf = pd.DataFrame({ 'Fruits':pd.Categorical(['apple','orange', 'apple', 'pineapple']), 
                      'Juices':pd.Categorical(['apple','orange smash','apple1','milkshake']), 
                      'Year': pd.Categorical([2011, 2011, 2012, 2012])}) 
print (datadf)
      Fruits        Juices  Year
0      apple         apple  2011
1     orange  orange smash  2011
2      apple        apple1  2012
3  pineapple     milkshake  2012

data_df_splitone = datadf[(datadf['Year'] == 2011)].copy()
data_df_splittwo = datadf[(datadf['Year'] == 2012)].copy()

L1 = data_df_splitone['Juices']
L2 = data_df_splittwo['Juices']

data_df_splitone['new'] = [difflib.get_close_matches(i, L2, 3, 0.6) for i in L1]
print (data_df_splitone)
   Fruits        Juices  Year       new
0   apple         apple  2011  [apple1]
1  orange  orange smash  2011        []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...