#python #pandas
#python #панды
Вопрос:
У меня есть два выровненных фрейма данных с фиктивными переменными. Я хотел бы умножить два и получить новый результат фрейма данных в результате взаимодействия двух с 3 строками и 6 столбцами (ItalyxJan, ItalyxFeb, ItalyxMar, ChinaxJan ..)
# Creating the first dataframe
df1=pd.DataFrame({"Italy":[0,0,1],
"China":[1,1,0]})
# Creating the second dataframe with <code>Na</code> value
df2=pd.DataFrame({"Jan":[1,0,0],
"Feb":[0,1,0],
"Mar":[0,0,1]})
df3 = df1.mul(df2.values, axis=0)
, но я получил сообщение об ошибке
ValueError: Unable to coerce to DataFrame, shape must be (3, 2): given (3, 3)
##Expected outputs
df3=pd.DataFrame({"Italy*Jan":[0,0,0],
"Italy*Feb":[0,0,0],
"Italy*Mar":[0,0,1],
"China*Jan":[1,0,1],
"China*fe":[0,1,0],
"Chian*Mar":[0,0,0]})
Предложения?
Комментарии:
1. каков ваш ожидаемый результат?
2.
mul
Оператор, который вы пытаетесь использовать, выдает эту ошибку, потому что вы пытаетесь умножить2x3
матрицу на3x3
матрицу. Он ожидает3x2
матрицу.
Ответ №1:
Вы можете создавать MultiIndex.from_product
и DataFrame.reindex
то, и другое, поэтому возможно несколько:
mux = pd.MultiIndex.from_product([df1.columns, df2.columns])
df1 = df1.reindex(mux, axis=1, level=0)
print (df1)
Italy China
Jan Feb Mar Jan Feb Mar
0 0 0 0 1 1 1
1 0 0 0 1 1 1
2 1 1 1 0 0 0
df2 = df2.reindex(mux, axis=1, level=1)
print (df2)
Italy China
Jan Feb Mar Jan Feb Mar
0 1 0 0 1 0 0
1 0 1 0 0 1 0
2 0 1 1 0 1 1
df3 = df1.mul(df2, axis=0)
print (df3)
Italy China
Jan Feb Mar Jan Feb Mar
0 0 0 0 1 0 0
1 0 0 0 0 1 0
2 0 1 1 0 0 0
Последнее можно сгладить MultiIndex
с map
помощью и join
:
df3.columns = df3.columns.map('x'.join)
print (df3)
ItalyxJan ItalyxFeb ItalyxMar ChinaxJan ChinaxFeb ChinaxMar
0 0 0 0 1 0 0
1 0 0 0 0 1 0
2 0 1 1 0 0 0