我从两个数据帧开始-一个填充了星期几的虚拟变量,另一个填充了一天中某小时的虚拟变量(HE - hour and )。
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 0df2 =一天中的小时数=n x l,其中n是obs的数量,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我想创建一个维度为n x (m×l)的新df,其中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做这件事,而不仅仅是这几个。如果有什么方法可以推广的话,我将非常感谢你的帮助。
基本上,在pandas中有没有一种方法可以将两个数据帧维度n x m,n x l相乘,从而得到维度n x (m×l)的新df?
发布于 2018-09-04 06:28:03
您可以在此处仅使用for循环
pd.concat([hours.multiply(days[x],axis='index').add_prefix(x) for x in days.columns],1)发布于 2018-09-04 06:27:54
您可以使用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 0https://stackoverflow.com/questions/52156445
复制相似问题