Nano Hash - криптовалюты, майнинг, программирование

Как сделать функцию, которая позволяет мне взять первую строку фрейма данных и создать список 2-х кортежей?

 df100=a[['genres','imdb_score']]
 df100
            genres                imdb_score
 0  Action|Adventure|Fantasy|Sci-Fi 7.9
 1  Action|Adventure|Fantasy        7.1
 2  Action|Adventure|Thriller       6.8
 3  Action|Thriller                 8.5
 4  Documentary                     7.1
       ...  ... ...
5038 Comedy|Drama                   7.7
5039 Crime|Drama|Mystery|Thriller   7.5
5040 Drama|Horror|Thriller          6.3
5041 Comedy|Drama|Romance           6.3
5042 Documentary                    6.6

def tuples(p):

   t= [(p[0], p[1]) for p[0], p[1] in zip(df100.genres, df100.imdb_score) for p[0] in p[0].split('|')]

     return t

tuples(df100.loc[0,['genres','imdb_score']])

Итак, я создал фрейм данных выше с жанрами и оценкой imdb в качестве столбцов. Затем я создал функцию tuples(), которая берет столбец жанра, разделяет каждый уникальный жанр, а затем добавляет к нему imdb_score (как показано ниже). Затем я применил эту функцию, показанную, tuples(df100.loc[0,[ 'genres','imdb_score']]), в надежде получить то, что показано ниже, 2d-кортежи только первой строки фрейма данных. Однако в итоге я получаю один список для всех строк в кадре данных, а не только для первой строки. Может ли кто-нибудь помочь в том, как я могу изменить функцию, чтобы использовать ее в первой строке, а затем применить ко всему фрейму данных отдельно.

[('Action',7.9),('Adventure',7.9),('Fantasy',7.9),('Sci-Fi',7.9)]

  • Я не могу проверить это, так как у меня другой набор данных, но это работает. ЛМК для образования. Внутри функции › t= [(p[0], p[1]) для p[0], p[1] в zip(df100.genres[0], df100.imdb_score[0]) для p[0] в p[0].split('|')] 21.04.2020

Ответы:


1
import pandas as pd
from datetime import datetime


def get_tuples(p):    
    t = [(k, p['imdb_score']) for k in p['genres'].split('|')]

    return t


df100 = pd.DataFrame({'genres': ['Action|Adventure|Fantasy|Sci-Fi', 'Action|Adventure|Fantasy', 'Action|Adventure|Thriller'],
                   'imdb_score': [7.9, 7.1, 6.8]})

x = get_tuples(df100.loc[0, ['genres','imdb_score']])

print(x)

Выход:

[('Action', 7.9), ('Adventure', 7.9), ('Fantasy', 7.9), ('Sci-Fi', 7.9)]
20.04.2020

2

IIUC, вам нужен список кортежей для каждой строки; вы можете добиться этого с помощью zip и itertools product. вы должны иметь возможность изменить его на то, что вам нужно. дайте мне знать, если мое предположение ложно:

from itertools import product
                 #create a cross join with product 
                 #entry from df.imdb_score is wrapped in a list
                 #else the string will be used and the cross join
                 #will produce a combo of individual strings and genre
df['pairing'] = [list(product(genre,[score]))
                 for genre,score in
                  #split the data, before pairing 
                 zip([ent.split('|') for ent in df.genres],df.imdb_score)]
df.head()
         genres                     imdb_score  pairing
0   Action|Adventure|Fantasy|Sci-Fi 7.9 [(Action, 7.9), (Adventure, 7.9), (Fantasy, 7....
1   Action|Adventure|Fantasy        7.1 [(Action, 7.1), (Adventure, 7.1), (Fantasy, 7.1)]
2   Action|Adventure|Thriller       6.8 [(Action, 6.8), (Adventure, 6.8), (Thriller, 6...
3   Action|Thriller                 8.5 [(Action, 8.5), (Thriller, 8.5)]
4   Documentary                     7.1 [(Documentary, 7.1)]
20.04.2020

3

IIUC, используя взрыв и itertuples, мы можем создать кортеж из фрейма данных.

s = df['genres'].str.split('|').explode().to_frame()

s['score'] = s.index.map(df['imdb_score'])

t = list(s.itertuples(index=False,name=None))

print(t)

[('Action', 7.9),
 ('Adventure', 7.9),
 ('Fantasy', 7.9),
 ('Sci-Fi', 7.9),
 ('Action', 7.1),
 ('Adventure', 7.1),
 ('Fantasy', 7.1),
 ('Action', 6.8),
 ('Adventure', 6.8),
 ('Thriller', 6.8),
 ('Action', 8.5),
 ('Thriller', 8.5),
 ('Documentary', 7.1),
 ('Comedy', 7.7),
 ('Drama', 7.7),
 ('Crime', 7.5),
 ('Drama', 7.5),
 ('Mystery', 7.5),
 ('Thriller', 7.5),
 ('Drama', 6.3),
 ('Horror', 6.3),
 ('Thriller', 6.3),
 ('Comedy', 6.3),
 ('Drama', 6.3),
 ('Romance', 6.3)]

если вам нужно настроить таргетинг на определенную строку, тогда эта функция, использующая isin, сделает свое дело:

def tuple_row(frame,row_num):
    s = frame['genres'].str.split('|').explode().to_frame()
    s['score'] = s.index.map(frame['imdb_score'])
    return list(s[s.index.isin([row_num])].itertuples(index=False,name=None))


tuple_row(df,5)
[('Comedy', 7.7), ('Drama', 7.7)]

если вы хотите, чтобы каждая строка во вложенном списке сортов.

l = [list(i.itertuples(name=None,index=False)) for _,i in s.groupby(level=0)]

[[('Action', 7.9), ('Adventure', 7.9), ('Fantasy', 7.9), ('Sci-Fi', 7.9)],
 [('Action', 7.1), ('Adventure', 7.1), ('Fantasy', 7.1)],
 [('Action', 6.8), ('Adventure', 6.8), ('Thriller', 6.8)],
 [('Action', 8.5), ('Thriller', 8.5)],
 [('Documentary', 7.1)],
 [('Comedy', 7.7), ('Drama', 7.7)],
 [('Crime', 7.5), ('Drama', 7.5), ('Mystery', 7.5), ('Thriller', 7.5)],
 [('Drama', 6.3), ('Horror', 6.3), ('Thriller', 6.3)],
 [('Comedy', 6.3), ('Drama', 6.3), ('Romance', 6.3)],
 [('Documentary', 6.6)]]
20.04.2020
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..