根据其他列的条件创建新列

时间:2020-09-09 11:29:51

标签: python pandas

我有这张表,其中显示了小时,总计和km_length:

type   hour  km_length   total 
A       1                  1
B               2          1

我想添加一列显示汇率的列。费率可以用两种情况下的两列来计算:

(1) rate = (hour x 100) / total
(2) rate = (km_length x 1000000) / total 

当该行的小时值为零时,它将使用第一个方程式。如果该行的值为km_length,则将使用第二个方程。

然后表格将如下所示:

type    hour     km_length    total    rate
A        1                      1      100
B                    2          1      2000000

反正我可以使用python做到吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

pandas.DataFrame.bfillaxis==1一起使用:

# df = df.replace("", np.nan) # In case it's whitespace(s) instead of np.nan
df["hour"] = df["hour"] * 100
df["km_length"] = df["km_length"] * 1000000
df["rate"] = df.bfill(1)["hour"]/df["total"]
print(df)

输出:

  type   hour  km_length  total   rate
0    A  100.0        NaN      1    100
1    B    NaN  2000000.0      1  2e+06

答案 1 :(得分:0)

我想知道您是否正在寻找将这些情况组合成一个方程式。如果是这样,请使用np.nan_to_num()函数:

import pandas as pd
import numpy as np

df = pd.DataFrame({'type': ['A','B'],'hour': [1,np.NaN], 'km_length': [np.NaN,2], 'total' : [1,1]})
df['rate'] = ( np.nan_to_num(df['hour'])*100 + np.nan_to_num(df['km_length'])*1000000 ) / df['total']
print(df)

  type  hour  km_length  total       rate
0    A   1.0        NaN      1      100.0
1    B   NaN        2.0      1  2000000.0