根据另一个数据集中的列值在一个数据框中创建列

香努

我有两个熊猫数据框

import pandas as pd 
import numpy as np
import datetime

# intialise data of lists. 
data = {'group'      :["A","A","A","B","B","B","B"],
        'val': ["AA","AB","AC","B1","B2","AA","AB"],
        'cal1'     :[4,5,7,6,5,8,9],
        'cal2'     :[10,100,100,10,1,10,100]
       } 

# Create DataFrame 
df1 = pd.DataFrame(data) 
df1

    group   val cal1    cal2
0   A       AA  4       10
1   A       AB  5       100
2   A       AC  7       100
3   B       B1  6       10
4   B       B2  5       1
5   B       AA  8       10
6   B       AB  9       100

import pandas as pd 
import numpy as np
import datetime

# intialise data of lists. 
data = {'group'      :["A","A","A","B","B","B","B"],
        'flag' : [1,0,0,1,0,0,0],
        'var1': [1,2,3,7,8,9,10]
       } 

# Create DataFrame 
df2 = pd.DataFrame(data) 
df2

   group   flag var1
0   A       1   1
1   A       0   2
2   A       0   3
3   B       1   7
4   B       0   8
5   B       0   9
6   B       0   10

步骤1:根据df1中的唯一“ val”在df2中创建列,如下所示:

unique_val = df1['val'].unique().tolist()
new_cols = [t + '_new' for t in unique_val]
for i in new_cols:
    df2[i] = 0
df2
    group   flag    var1    AA_new  AB_new  AC_new  B1_new  B2_new
0   A       1       1       0       0       0       0        0
1   A       0       2       0       0       0       0        0
2   A       0       3       0       0       0       0        0
3   B       1       7       0       0       0       0        0
4   B       0       8       0       0       0       0        0
5   B       0       9       0       0       0       0        0
6   B       0       10      0       0       0       0        0

步骤2:对于标志= 1的行,AA_new将计算为var1(来自df2)*对于组“ A”为df1中的“ cal1”值,而val“ AA” *对于“ A”组则为df1中的“ cal2”值”和val“ AA”,类似地,将AB_new计算为var1(来自df2)*对于组“ A”来自df1的'cal1'值,以及val“ AB” * d“对于组” A“从df1获得的'cal2'的值val“ AB”

我的预期输出应如下所示:

    group   flag    var1    AA_new  AB_new  AC_new  B1_new  B2_new
0   A       1       1       40      500     700     0        0
1   A       0       2       0       0       0       0        0
2   A       0       3       0       0       0       0        0
3   B       1       7       570     6300    0       420      35
4   B       0       8       0       0       0       0        0
5   B       0       9       0       0       0       0        0
6   B       0       10      0       0       0       0        0
安塞夫

DataFrame.pivot_table与一起使用GroupBy.bfill便可以使用DataFrame.mul

df2.assign(**df1.pivot_table(columns='val',
                             values='cal',
                             index = ['group', df2.index])
                .add_suffix('_new')
                .groupby(level=0)
               #.apply(lambda x: x.bfill().ffill()) #maybe neccesary instead bfill
                .bfill()
                .reset_index(level='group',drop='group')
                .fillna(0)
                .mul(df2['var1'], axis=0)
                .where(df2['flag'].eq(1), 0)
               #.astype(int) # if you want int
)

输出量

  group  flag  var1  AA_new  AB_new  AC_new  B1_new  B2_new
0     A     1     1     4.0     5.0     7.0     0.0     0.0
1     A     0     2     0.0     0.0     0.0     0.0     0.0
2     A     0     3     0.0     0.0     0.0     0.0     0.0
3     B     1     7    56.0    63.0     0.0    42.0    35.0
4     B     0     8     0.0     0.0     0.0     0.0     0.0
5     B     0     9     0.0     0.0     0.0     0.0     0.0
6     B     0    10     0.0     0.0     0.0     0.0     0.0

编辑

df2.assign(**df1.assign(mul_cal = df1['cal1'].mul(df1['cal2']))
                .pivot_table(columns='val',
                             values='mul_cal',
                             index = ['group', df2.index])
                .add_suffix('_new')
                .groupby(level=0)
               #.apply(lambda x: x.bfill().ffill()) #maybe neccesary instead bfill
                .bfill()
                .reset_index(level='group',drop='group')
                .fillna(0)
                .mul(df2['var1'], axis=0)
                .where(df2['flag'].eq(1), 0)
               #.astype(int) # if you want int
)


  group  flag  var1  AA_new  AB_new  AC_new  B1_new  B2_new
0     A     1     1    40.0   500.0   700.0     0.0     0.0
1     A     0     2     0.0     0.0     0.0     0.0     0.0
2     A     0     3     0.0     0.0     0.0     0.0     0.0
3     B     1     7   560.0  6300.0     0.0   420.0    35.0
4     B     0     8     0.0     0.0     0.0     0.0     0.0
5     B     0     9     0.0     0.0     0.0     0.0     0.0
6     B     0    10     0.0     0.0     0.0     0.0     0.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据另一个数据框计算数据框中的列值

来自分类Dev

Python Pandas:根据另一个数据框的类别值创建新列

来自分类Dev

根据另一个数据框的值删除一个数据框的行和列

来自分类Dev

根据条件从 R 中的另一个数据集中添加一个数据集中的列值 - 不同的长度

来自分类Dev

根据条件从另一个数据框中复制列值

来自分类Dev

Python根据另一个数据框中的列值匹配列名

来自分类Dev

Python根据另一个数据框中的列值匹配列名

来自分类Dev

根据条件为另一个数据框的数据框列设置值

来自分类Dev

根据另一个数据框从数据框中设置子集/选择列

来自分类Dev

根据python中另一个数据框的2列过滤数据框

来自分类Dev

使用一个数据框列中的键和另一个数据框列中的值创建字典

来自分类Dev

根据另一个数据框的值插值列的缺失值

来自分类Dev

根据另一个数据集中的值更改另一个数据集中的值

来自分类Dev

Python根据另一个数据框值中存在的列索引填充数据框值

来自分类Dev

根据匹配的值,使用另一个数据框中的值更新一个数据框中的列

来自分类Dev

根据关键列值熊猫将一个数据框中的行与另一个数据框中的行匹配

来自分类Dev

根据另一个数据框替换一个数据框中的列中的多个值

来自分类Dev

根据另一个数据框列值pyspark设置列状态

来自分类Dev

根据Pandas中的ID将列值从一个数据框复制到另一个数据框

来自分类Dev

根据另一个数据框中的值将列添加到数据框中

来自分类Dev

根据id列中的公共值从另一个数据框中减去数据框的行

来自分类Dev

熊猫:根据另一个数据框中的值在数据框中添加新列

来自分类Dev

根据与另一个数据框的匹配在数据框中创建新列

来自分类Dev

根据另一个数据框的行值在数据框中添加新列

来自分类Dev

根据另一个数据框中的匹配ID替换数据框列值

来自分类Dev

根据另一个数据框中的值对一个数据框进行子集

来自分类Dev

根据另一个数据框python熊猫替换列值-更好的方法?

来自分类Dev

语言:如何根据另一个数据框在数据框中创建新列?

来自分类Dev

根据来自另一个数据框的值创建新的数据框

Related 相关文章

  1. 1

    根据另一个数据框计算数据框中的列值

  2. 2

    Python Pandas:根据另一个数据框的类别值创建新列

  3. 3

    根据另一个数据框的值删除一个数据框的行和列

  4. 4

    根据条件从 R 中的另一个数据集中添加一个数据集中的列值 - 不同的长度

  5. 5

    根据条件从另一个数据框中复制列值

  6. 6

    Python根据另一个数据框中的列值匹配列名

  7. 7

    Python根据另一个数据框中的列值匹配列名

  8. 8

    根据条件为另一个数据框的数据框列设置值

  9. 9

    根据另一个数据框从数据框中设置子集/选择列

  10. 10

    根据python中另一个数据框的2列过滤数据框

  11. 11

    使用一个数据框列中的键和另一个数据框列中的值创建字典

  12. 12

    根据另一个数据框的值插值列的缺失值

  13. 13

    根据另一个数据集中的值更改另一个数据集中的值

  14. 14

    Python根据另一个数据框值中存在的列索引填充数据框值

  15. 15

    根据匹配的值,使用另一个数据框中的值更新一个数据框中的列

  16. 16

    根据关键列值熊猫将一个数据框中的行与另一个数据框中的行匹配

  17. 17

    根据另一个数据框替换一个数据框中的列中的多个值

  18. 18

    根据另一个数据框列值pyspark设置列状态

  19. 19

    根据Pandas中的ID将列值从一个数据框复制到另一个数据框

  20. 20

    根据另一个数据框中的值将列添加到数据框中

  21. 21

    根据id列中的公共值从另一个数据框中减去数据框的行

  22. 22

    熊猫:根据另一个数据框中的值在数据框中添加新列

  23. 23

    根据与另一个数据框的匹配在数据框中创建新列

  24. 24

    根据另一个数据框的行值在数据框中添加新列

  25. 25

    根据另一个数据框中的匹配ID替换数据框列值

  26. 26

    根据另一个数据框中的值对一个数据框进行子集

  27. 27

    根据另一个数据框python熊猫替换列值-更好的方法?

  28. 28

    语言:如何根据另一个数据框在数据框中创建新列?

  29. 29

    根据来自另一个数据框的值创建新的数据框

热门标签

归档