Панды: как назначить информацию из одного кадра данных в другой в зависимости от размера информации?

#python #pandas

Вопрос:

У меня есть два df1 кадра данных, и df2 мне нравятся следующие

 df1
      val
0      -2
1      -1
2      -5
3      -2
4      -4
5      -7
6      -7
7      -3
8      -6

df2
      Name Year size
0     Marc 2010  2
1     Marc 2011  1
2     Eric 2010  1
3     Eric 2011  1
4     Sara 2010  2
5     Sara 2011  2
 

Я хотел бы обновить информацию о df1 на основе информации из df2 следующим образом:

 df1
      val   Name   Year
0     -2    Marc   2010
1     -1    Marc   2010
2     -5    Marc   2011
3     -2    Eric   2010
4     -4    Eric   2011
5     -7    Sara   2010
6     -7    Sara   2010
7     -3    Sara   2011
8     -6    Sara   2011
 

P.S. Я не могу присоединиться к этой информации.

Ответ №1:

Попробуй:

 >>> df1.join(df2.reindex(df2.index.repeat(df2["size"])).reset_index(drop=True)).drop("size", axis=1)
   Val   Name  Year
0   -2   Marc  2010
1   -1   Marc  2010
2   -5   Marc  2011
3   -2   Eric  2010
4   -4   Eric  2011
5   -7  Ssara  2010
6   -7  Ssara  2010
7   -3  Ssara  2011
8   -6  Ssara  2011
 

Комментарии:

1. Я не знал, что pd.Index.repeat это работает со списком (от 0 до выпадения) повторений. Хорошее решение.

2. @Michaelsczesny — я тоже узнал об этом от SO некоторое время назад 😉