Перемещение данных с одного кадра данных на другой в пандах с одним идентичным столбцом - PullRequest
0 голосов
/ 28 августа 2018

Так что я все еще прохожу через панд и испытываю небольшие проблемы с этим

Набор данных 1

Sample Age   Tumor     Location
   3   31    Benign      Lung
   8   45   Malignant    Heart
   9   44   Malignant    Heart

Набор данных 2

Sample Age   Tumor     Location
   3   None  None        None 
   8   None  None        None 
   9   None  None        None 

То, что я хочу, я пытаюсь сделать, это переместить данные из набора данных 1 в набор данных 2 на основе столбца образца, чтобы они правильно отображались

Как и так

Набор данных 2

Sample Age   Tumor     Location
   3   31    Benign      Lung
   8   45   Malignant    Heart
   9   44   Malignant    Heart

Я пока не могу найти пример, который делает это. Кроме слияния двух в новый фрейм данных?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

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

#Setup
import pandas as pd

dataset_1 = {
        'Sample': [3, 8, 9], 
        'Age': [31, 45, 44], 
        'Tumor': ['Benign', 'Malignant', 'Malignant'],
        'Location': ['Lung', 'Heart', 'Heart']
        }
dataset_2 = {
        'Sample': [3, 8, 9], 
        'Age': [None, None, None], 
        'Tumor': [None, None, None],
        'Location': [None, None, None]
        }

df_1 = pd.DataFrame(dataset_1)
df_2 = pd.DataFrame(dataset_2)
print(df_1)
print(df_2)

Какие выходы:

   Age Location  Sample      Tumor
0   31     Lung       3     Benign
1   45    Heart       8  Malignant
2   44    Heart       9  Malignant
    Age Location  Sample Tumor
0  None     None       3  None
1  None     None       8  None
2  None     None       9  None

Вот как использовать loc, чтобы установить столбцы равными, где строки одного столбца равны строкам другого. В этом случае сравниваемые столбцы - это столбцы Sample двух фреймов данных:

df_2.loc[df_2.Sample == df_1.Sample, :] = df_1

print(df_1)
print(df_2)

Что дает нам:

   Age Location  Sample      Tumor
0   31     Lung       3     Benign
1   45    Heart       8  Malignant
2   44    Heart       9  Malignant
   Age Location  Sample      Tumor
0   31     Lung       3     Benign
1   45    Heart       8  Malignant
2   44    Heart       9  Malignant

Надеюсь, это то, что вы ищете. Удачи!

0 голосов
/ 28 августа 2018

Используя update и предполагая, что 'Sample' является уникальным ключом для карты

df2=df2.set_index('Sample')
df2.update(df1.set_index('Sample'))
df2.reset_index(inplace=True)
df2
Out[1046]: 
   Sample Age      Tumor Location
0       3  31     Benign     Lung
1       8  45  Malignant    Heart
2       9  44  Malignant    Heart
...