python pandas - 将列除以另一列

Posted

技术标签:

【中文标题】python pandas - 将列除以另一列【英文标题】:python pandas - dividing column by another column 【发布时间】:2016-05-28 03:33:54 【问题描述】:

我正在尝试向我的DataFrame 添加一列,这是其他两列相除的产物,如下所示:

df['$/hour'] = df['$']/df['hours']

这工作正常,但如果['hours'] 中的值小于1,那么['$/hour'] 的值大于['$'] 中的值,这不是我想要的。

有没有办法控制操作,如果['hours'] < 1 然后df['$/hour'] = df['$']

【问题讨论】:

【参考方案1】:

你可以使用numpy.where:

print df
    hours  $
0       0  8
1       0  9
2       0  9
3       3  6
4       6  4
5       3  7
6       5  5
7      10  1
8       9  3
9       3  6
10      5  4
11      5  7

df['$/hour'] = np.where(df['hours'] < 1, df['hours'], df['$']/df['hours'])
print df
    hours  $    $/hour
0       0  8  0.000000
1       0  9  0.000000
2       0  9  0.000000
3       3  6  2.000000
4       6  4  0.666667
5       3  7  2.333333
6       5  5  1.000000
7      10  1  0.100000
8       9  3  0.333333
9       3  6  2.000000
10      5  4  0.800000
11      5  7  1.400000

【讨论】:

【参考方案2】:
df['$/hour'] = df.apply(lambda x: x['$'] if x['$'] < 1 else x['$']/x['hours'], axis=1)

【讨论】:

【参考方案3】:

您还可以使用DataFrame.loc 过滤和选择要设置的索引:

df['$/hour'].loc[df['hours']>=1] = df['$']/df['hours']
df['$/hour'].loc[df['hours']<1] = df['$']

【讨论】:

以上是关于python pandas - 将列除以另一列的主要内容,如果未能解决你的问题,请参考以下文章

如何对一列执行 pandas groupby 操作,但将另一列保留在结果数据框中

根据另一列中的值删除一列的重复项,Python,Pandas

pyspark 将列值与另一列进行比较包含值范围

如何将列除以 Spark DataFrame 中的总和

基于另一列的每个值的列值总和,然后除以总数

使用 Scala 将列分配给 Spark Dataframe 中的另一列