Как заполнить фрейм данных значениями из файла

Я создал фрейм данных с именами столбцов и строк. Например

   a   b   c   d
1 Nan Nan Nan Nan
2 Nan Nan Nan Nan
3 Nan Nan Nan Nan

Теперь я хочу заполнить фрейм данных значениями из файла tsv. Мой файл выглядит следующим образом:

1  b   80
2  c   90
3  a   60

Чтобы создать это

   a   b   c   d
1 Nan 80  Nan Nan
2 Nan Nan 90  Nan
3 60  Nan Nan Nan

Могу ли я использовать панды, чтобы заполнить фрейм данных значениями из моего файла? Итак, я хочу, чтобы python искал нужную строку и столбец и поместил туда свое значение. Заранее спасибо!

1 ответ

Решение

Я думаю тебе нужно pivot с reindex:

df1 = pd.DataFrame(index=[1,2,3], columns=list('abcd'))
print (df1)
     a    b    c    d
1  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN
3  NaN  NaN  NaN  NaN

print (df2)
   A  B   C
0  1  b  80
1  2  c  90
2  3  a  60

df = df2.pivot(index='A', columns='B', values='C') \
        .reindex(index=df1.index, columns= df1.columns)
print (df)
      a     b     c   d
1   NaN  80.0   NaN NaN
2   NaN   NaN  90.0 NaN
3  60.0   NaN   NaN NaN

Альтернативное решение с unstack:

df = df2.set_index(['A','B'])['C'].unstack() \
        .reindex(index=df1.index, columns= df1.columns)
print (df)
      a     b     c   d
1   NaN  80.0   NaN NaN
2   NaN   NaN  90.0 NaN
3  60.0   NaN   NaN NaN

Если дублирует в A а также B использование pivot_table с некоторой агрегатной функцией, такой как mean:

print (df2)
   A  B    C
0  1  b   80 <-duplicates for same A, B
1  1  b  100 <-duplicates for same A, B
2  2  c   90
3  3  a   60

df = df2.pivot_table(index='A', columns='B', values='C', aggfunc='mean') \
        .reindex(index=df1.index, columns= df1.columns)
print (df)
      a     b     c   d
1   NaN  90.0   NaN NaN
2   NaN   NaN  90.0 NaN
3  60.0   NaN   NaN NaN

df = df2.groupby(['A','B'])['C'].mean().unstack() \
        .reindex(index=df1.index, columns= df1.columns)
print (df)
      a     b     c   d
1   NaN  90.0   NaN NaN
2   NaN   NaN  90.0 NaN
3  60.0   NaN   NaN NaN
Другие вопросы по тегам