我有这张表,其中显示了小时,总计和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做到吗?
谢谢。
答案 0 :(得分:3)
将pandas.DataFrame.bfill
与axis==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