gpt4 book ai didi

python - Pandas 在有条件时不返回同一行中的值

转载 作者:行者123 更新时间:2023-12-01 02:03:01 25 4
gpt4 key购买 nike

假设我创建了一个简单的数据框并添加了一些列

import pandas as pd

data = {
'price': [6, 5.5, 5, 4.8],
'amount': [10, 12, 8, 6]
}
df = pd.DataFrame(data=data)
df['total'] = df.price * df.amount
df['running_total'] = df.total.cumsum().round(2)

我的数据框现在看起来像这样:

   amount  price  total  running_total
0 10 6.0 60.0 60.0
1 12 5.5 66.0 126.0
2 8 5.0 40.0 166.0
3 6 4.8 28.8 194.8

我想要数据框中运行总计略低于 160 的行:

row_under_160 = df[df['running_total'] < 160].max()

这一行(系列)看起来像这样:

amount            12.0
price 6.0
total 66.0
running_total 126.0
dtype: float64

除价格外,所有值看起来都不错。由于某种原因,当它应该返回 5.5(相应的值)时,它却返回最高价格 (6.0)。

我错过了什么/这样做完全错误吗?

最佳答案

它工作得很好,但是max值是从过滤后的DataFrame中计数的:

row_under_160 = df[df['running_total'] < 160]
print (row_under_160)
amount price total running_total
0 10 6.0 60.0 60.0
1 12 5.5 66.0 126.0

获取每列的最大值:

print (row_under_160.max())
amount 12.0
price 6.0
total 66.0
running_total 126.0
dtype: float64

但似乎需要过滤后的DataFrame的索引,其中running_totalmax by idxmax并通过 loc 选择:

print (row_under_160['running_total'].idxmax())
1

print (row_under_160.loc[row_under_160['running_total'].idxmax()])
amount 12.0
price 5.5
total 66.0
running_total 126.0
Name: 1, dtype: float64

如果需要一行DataFrame添加[]:

print (row_under_160.loc[[row_under_160['running_total'].idxmax()]])
amount price total running_total
1 12 5.5 66.0 126.0

或者按max值进行比较:

print (row_under_160[row_under_160['running_total'] == row_under_160['running_total'].max()])
amount price total running_total
1 12 5.5 66.0 126.0

关于python - Pandas 在有条件时不返回同一行中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49401544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com