【问题标题】:Max of pandas dataframe columns multiplied together最大的熊猫数据框列相乘
【发布时间】:2016-09-09 11:16:03
【问题描述】:

鉴于此数据:

data = {'C1_IND' : [1,1,0,0,1],
        'C1_PRICE' : [55,84,0,0,103],
        'P1_IND' : [1,0,0,1,1],
        'P1_PRICE' : [72,0,0,33,95]}
df = pd.DataFrame(data)

如何在同一数据框中创建一个变量:

max(C1_IND*C1_PRICE,P1_IND*P1_PRICE)

另外,如果该数据中有空值,会有什么问题吗?

【问题讨论】:

  • 当你说max(C1_IND*C1_PRICE,P1_IND*P1_PRICE) 这些是如何按行或按列相乘的?

标签: python pandas dataframe max multiple-columns


【解决方案1】:

我认为您可以通过filter 选择列,然后通过prod 选择多个列。最后申请max

a = df.filter(like='C1').prod(1)
b = df.filter(like='P1').prod(1)
df['max'] = pd.DataFrame({'a':a,'b':b}).max(1)
print (df)
   C1_IND  C1_PRICE  P1_IND  P1_PRICE  max
0       1        55       1        72   72
1       1        84       0         0   84
2       0         0       0         0    0
3       0         0       1        33   33
4       1       103       1        95  103

或者:

df['a'] = df.filter(like='C1').prod(1)
df['b'] = df.filter(like='P1').prod(1)
df['max'] = df[['a','b']].max(1)
df = df.drop(['a','b'], axis=1)
print (df)
   C1_IND  C1_PRICE  P1_IND  P1_PRICE  max
0       1        55       1        72   72
1       1        84       0         0   84
2       0         0       0         0    0
3       0         0       1        33   33
4       1       103       1        95  103

它也适用于NaN,但将参数skipna=False添加到prod

data = {'C1_IND' : [1,1,0,0,1],
        'C1_PRICE' : [55,84,0,0,8],
        'P1_IND' : [1,0,0,1,10],
        'P1_PRICE' : [72,0,0,33,np.nan]}
df = pd.DataFrame(data)

print (df)
   C1_IND  C1_PRICE  P1_IND  P1_PRICE
0       1        55       1      72.0
1       1        84       0       0.0
2       0         0       0       0.0
3       0         0       1      33.0
4       1         8      10       NaN

a = df.filter(like='C1').prod(1, skipna=False)
b = df.filter(like='P1').prod(1, skipna=False)

print (pd.DataFrame({'a':a,'b':b}))
    a     b
0  55  72.0
1  84   0.0
2   0   0.0
3   0  33.0
4   8   NaN

df['max'] = pd.DataFrame({'a':a,'b':b}).max(1)
print (df)
   C1_IND  C1_PRICE  P1_IND  P1_PRICE   max
0       1        55       1      72.0  72.0
1       1        84       0       0.0  84.0
2       0         0       0       0.0   0.0
3       0         0       1      33.0  33.0
4       1         8      10       NaN   8.0

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 2022-01-23
    • 2018-01-24
    • 2021-09-20
    • 2012-10-21
    • 2014-06-27
    • 2017-09-28
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多