numpy 如何根据从54到52和51到48的电压降计算pandas中的odo sum?

z3yyvxxp  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(125)

我有两个pandas Dataframe 列,一个是电压,另一个是odo阅读我想根据电压从54减少到52,对odo求和,什么是odo求和,51到48,什么是odo求和,等等

import pandas as pd

data = {
    'voltage': [54.8, 54.5, 53.90, 53.88, 53.50, 53.25, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 49.34, 49.00, 48.88, 48.34, 48.10, 47.70, 47.34, 47.10, 46.98, 46.23, 46.10, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 54.8, 54.5, 53.90, 53.88, 53.50, 53.25, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 49.34, 49.00, 48.88, 48.34, 48.10, 47.70, 47.34, 47.10, 46.98, 46.23, 46.10, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 53.25, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23],
    'odo': [1, 2, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 1, 2, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 1, 2, 3, 6, 7, 3, 4, 5, 6, 2]
}

df = pd.DataFrame(data)

当电压从54下降到52时的预期结果,即整个集合54.8,54.5,53.90,53.88,53.50,53.25,53.10,52.98,52.65,52.10 odo和1,2,3,6,7,3,4,5,6,20和下一个周期51.88,51.43,51.23,50.67,50.23,49.98,49.34,49.00以及相应的odo值和3,2,3,7,8,3,6,7,thase值和i需要预期结果54到52 odo和57,51到49 odo和39,等等

6g8kf2rb

6g8kf2rb1#

您可以使用pd.cut在 Dataframe 中创建一个新列,指示电压范围,然后使用groupby按电压范围分组,并计算每组的odo阅读之和。代码如下:

import pandas as pd

data = {
    'voltage': [54.8, 54.5, 53.90, 53.88, 53.50, 53.25, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 49.34, 49.00, 48.88, 48.34, 48.10, 47.70, 47.34, 47.10, 46.98, 46.23, 46.10, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 54.8, 54.5, 53.90, 53.88, 53.50, 53.25, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 49.34, 49.00, 48.88, 48.34, 48.10, 47.70, 47.34, 47.10, 46.98, 46.23, 46.10, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23, 49.98, 53.25, 53.10, 52.98, 52.65, 52.10, 51.88, 51.43, 51.23, 50.67, 50.23],
    'odo': [1, 2, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 1, 2, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 3, 2, 3, 7, 7, 8, 3, 6, 7, 3, 4, 5, 6, 2, 1, 2, 3, 6, 7, 3, 4, 5, 6, 2]
}

df = pd.DataFrame(data)

# define the voltage ranges
bins = [48, 51, 54, 57]

# create a new column indicating the voltage range for each row
df['voltage_range'] = pd.cut(df['voltage'], bins=bins)

# use groupby to group by the voltage ranges and calculate the sum of odo readings for each group
odo_sums = df.groupby('voltage_range')['odo'].sum()
print(odo_sums)

这将输出:

voltage_range
(48, 51]    209
(51, 54]    163
(54, 57]    254
Name: odo, dtype: int64

因此,电压从54降低到52的odo读数之和为254,从51降低到48的odo读数之和为163,依此类推。

相关问题