Как мне создать Dataframe_new в python из существующего Dataframe_old. - PullRequest
0 голосов
/ 10 декабря 2018

Мои предварительные извинения, если этот тип вопроса существует, я очень новичок в переполнении стека, я старался изо всех сил, чтобы увидеть, был ли уже дан ответ на этот вопрос.

Чтобы дать вам некоторый контекст.У меня есть тест с 100 изображениями рук, каждое изображение имеет один и тот же набор возможных ответов на выбор.Например:

  • сколько шрамов вы можете определить на руке ...... s0 / s1 / s2 / s3 +
  • какой ноготь находится в худшем состоянии.... f1 / f2 / f3 / f4 / f5
  • какой палец отсутствует ..... mf0 / mf1 / mf2 / mf3 / mf4 / mf5

Каждый возможный ответ на изображение уникален.Все ответы экспортируются в CSV-файл и импортируются в Python с помощью pd.read_csv, чтобы импортировать его в Dataframe_old.Похоже на это.

user_id |вопрос_ид |шрамы |ноготь |missing_fin

с соответствующими значениями данных.

1015 |1 |s2 |f5 |mf0

1016 |1 |s2 |f3 |mf0

1017 |1 |s2 |f5 |mf0

1015 |2 |s1 |f1 |mf1

1016 |2 |s1 |f1 |mf1

1017 |2 |s2 |f2 |mf1

Я хочу, чтобы Dataframe_new отражала что-то вроде этого.

question_id |s0 |s1 |s2 |s3 |s3 + |f1 |f2 |f3 |f4 |f5 |mf0 |mf1 |mf2 |mf3 |MF4 |mf5

значения данных будут подсчетом каждого ответа на вопрос для всех 100 вопросов / изображений.например.на вопрос 1, 50 пользователей ответили s0, 20 пользователей ответили s2 и один пользователь ответил s3 +.Вопрос 2, все 71 пользователь ответил s0

1 |50 |0 |20 |0 |1

2 |71 |0 |0 |0 |0

Я пытался читать на pandas.pivot_table, но близко не подошел.Я думаю, что мне нужно перебрать каждую ячейку в поле данных в Dataframe_old и там, где он видит значение, проверить, существует ли столбец в Dataframe_new, если нет, использовать значение данных в качестве метки столбца и считать 1.

Я мог бы легко усложнить это, но у меня очень мало опыта и я очень хочу учиться.Я не ожидаю, что кто-нибудь даст мне решение, даже если кто-то просто укажет мне правильное направление или посоветует, как мне лучше поступить.или пакеты на python, о которых я могу прочитать.

Я потратил много времени в Интернете, пытаясь выяснить это, но я думаю, что я ищу неправильные вопросы.

Спасибо, Стив

1 Ответ

0 голосов
/ 15 декабря 2018

Я бы создал пустышки из переменных, а затем сгруппировал данные по question_id и суммировал столбцы:

In [1]: import pandas as pd

In [2]: df = pd.read_csv('~/Desktop/stackoverflow_data.tsv', sep='\t')

In [3]: df
Out[3]: 
   user_id  question_id scars fingernail missing_fin
0     1015            1    s2         f5         mf0
1     1016            1    s2         f3         mf0
2     1017            1    s2         f5         mf0
3     1015            2    s1         f1         mf1
4     1016            2    s1         f1         mf1
5     1017            2    s2         f2         mf1

In [4]: df = pd.get_dummies(df, columns=['scars', 'fingernail', 'missing_fin'])

In [5]: df.drop('user_id', axis=1, inplace=True)

In [6]: df_new = df.groupby('question_id').sum(axis=0)

In [7]: df_new
Out[7]: 
             scars_s1  scars_s2  fingernail_f1  fingernail_f2  fingernail_f3  \
question_id                                                                    
1                   0         3              0              0              1   
2                   2         1              2              1              0   

             fingernail_f5  missing_fin_mf0  missing_fin_mf1  
question_id                                                   
1                        2                3                0  
2                        0                0                3  
...