熊猫,根据条件将一个DF的一部分与另一个DF相乘

时间:2020-01-09 22:14:41

标签: pandas dataframe conditional-statements

这很新,很难找到正确的方法来实现。

假设我的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。

有什么好办法吗?我试图使用whereconditionapply之类的方法,但是对这些东西的理解还不够,无法使它们正常工作。

编辑:使用以下代码为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)

1 个答案:

答案 0 :(得分:0)

我想我了解您正在努力实现的目标。您想将r中的每一行df2c中的相应列df1相乘,但是c中的元素只与{中的第一个元素相乘{1}}该行的其余部分不变。

我当时想可能有一种加入rdf1.transpose()的方法,但是我没有找到。 虽然不漂亮,但我认为以下代码可以解决您的问题:

df2