这很新,很难找到正确的方法来实现。
假设我的dataframe1看起来像这样,其中包含列名和一堆数字作为数据:
D L W S
1 2 3 4
4 3 2 1
1 2 3 4
我的dataframe2看起来像这样:
Name1 Name2 Name3 Name4
2 data data D
3 data data S
4 data data L
5 data data S
6 data data W
我想要一个新的数据帧,其结果是将第二数据帧的每一行与第一数据帧的每一行相乘,结果是将Name1的值与dataframe1的列中与Name4的值相匹配的值相乘dataframe2。
有什么好办法吗?我试图使用where
,condition
和apply
之类的方法,但是对这些东西的理解还不够,无法使它们正常工作。
编辑:使用以下代码为DataFrame创建虚假数据:
d1 = {'D':[1,2,3,4,5,6],'W':[2,2,2,2,2,2],'L':[6,5,4,3,2,1],'S':[1,2,3,4,5,6]}
d2 = {'col1': [3,2,7,4,5,6], 'col2':[2,2,2,2,3,4], 'col3':['data', 'data', 'data','data', 'data', 'data' ], 'col4':['D','L','D','W','S','S']}
df1 = pd.DataFrame(data = d1)
df2 = pd.DataFrame(data = d2)
再次编辑以获取更多信息
首先,我在这一点上更改了df1中的数据,因此这个新示例会更好。 好吧,如果要对df2的前四行进行乘法运算,那么我想从这两个数据帧中得出的数据就是这样。您可以看到Col2和Col3保持不变,但是根据Col4的字母,将Col1乘以df1中的相应因子:
d3 = {'col1':[3,6,9,12,15,18,12,10,8,6,4,2,7,14,21,28,35,42,8,8 ,8,8,8,8],'col2':[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2],'col3':['data','data','data','data','data','data','data','data' ,“数据”,“数据”,“数据”,“数据”,“数据”,“数据”,“数据”,“数据”,“数据”,“数据”,“数据”,“数据”,“ data','data','data','data'],'col4':['D','D','D','D','D','D','L',' L','L','L','L','L','D','D','D','D','D','D','W','W' ,'W','W','W','W']}
df3 = pd.DataFrame(data = d3)
答案 0 :(得分:0)
我想我了解您正在努力实现的目标。您想将r
中的每一行df2
与c
中的相应列df1
相乘,但是c
中的元素只与{中的第一个元素相乘{1}}该行的其余部分不变。
我当时想可能有一种加入r
和df1.transpose()
的方法,但是我没有找到。
虽然不漂亮,但我认为以下代码可以解决您的问题:
df2