Панды умножают несколько столбцов, чтобы сделать новый DF - PullRequest
0 голосов
/ 04 сентября 2018

Я начинаю с двух фреймов данных - один заполнен фиктивными переменными для дня недели, а другой заполнен фиктивными значениями для часа дня (HE - окончание часа).

df1 = дни недели = n x m, где n - количество наблюдений, m - 6:

    Mon Tue Wed Thu Fri Sat
0   1   0   0   0   0   0
1   0   1   0   0   0   0
2   0   0   1   0   0   0
3   0   0   0   1   0   0

df2 = часы дня = n x l, где n - это число наблюдений, m - 23:

    HE1 HE2 HE3 HE4 HE5 ... HE22 HE23
0   1   0   0   0   0   ... 0    0
1   0   1   0   0   0   ... 0    0
2   0   0   1   0   0   ... 0    0
3   0   0   0   1   0   ... 0    0

Я хочу создать новый df с размерами n x (m × l), где m × l = 6 * 23 = 138:

    MonHE1 MonHE2 MonHE3 MonHE4 MonHE5 ... SatHE22 SatHE23
0   1      0      0      0      0      ... 0       0
1   0      1      0      0      0      ... 0       0
2   0      0      1      0      0      ... 0       0
3   0      0      0      1      0      ... 0       0

Я успешен с этим:

hoursXdays = pd.DataFrame()
Mon = hours.multiply(days['Mon'],axis='index').add_prefix('Mon')
Tue = hours.multiply(days['Tue'],axis='index').add_prefix('Tue')
Wed = hours.multiply(days['Wed'],axis='index').add_prefix('Wed')
Thu = hours.multiply(days['Thu'],axis='index').add_prefix('Thu')
Fri = hours.multiply(days['Fri'],axis='index').add_prefix('Fri')
Sat = hours.multiply(days['Sat'],axis='index').add_prefix('Sat')
hoursXdays = pd.concat([Mon, Tue, Wed, Thu, Fri, Sat],axis=1)

Мне нужно сделать это для гораздо большего количества dfs, чем просто эти несколько Если я смогу это обобщить, буду признателен за помощь.

В принципе, есть ли в пандах способ умножить два кадра данных размером n x m, n x l, чтобы создать новое значение df измерения n x (m умножить на l)?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы можете просто использовать для цикла здесь

pd.concat([hours.multiply(days[x],axis='index').add_prefix(x) for x in days.columns],1)
0 голосов
/ 04 сентября 2018

Вы можете использовать itertools.product и pd.DataFrame конструктор по умолчанию

d = {a[0]+b[0]: np.array(a[1])*b[1] for a,b in itertools.product(df.to_dict('list').items(), df2.to_dict('list').items())}

dff = pd.DataFrame(d)

MonHE1  MonHE2  ... SatHE22 SatHE23
0   1   0       ... 0       0
1   0   0       ... 0       0
2   0   0       ... 0       0
3   0   0       ... 0       0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...