gpt4 book ai didi

python - pandas 计数范围在两个数据框中

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

假设我有两个数据框:(1) 范围列表(2)实际值

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

SLA = {'Wertebereich': [5, 10, 15, 20, 25]}
SLA = pd.DataFrame(data=SLA)


messwerte = pd.DataFrame(np.random.randint(0,30,size=10),
columns=["Messwerte"],
index=pd.date_range("20180101", periods=10))


Wertebereich
0 5
1 10
2 15
3 20
4 25

Messwerte
2018-01-01 22
2018-01-02 13
2018-01-03 14
2018-01-04 17
2018-01-05 1
2018-01-06 11
2018-01-07 17
2018-01-08 6
2018-01-09 4
2018-01-10 10

我现在想向 SLA 添加一个新列(“计数”),在其中汇总每个范围内的所有出现次数。

我创建了一个迭代解决方案,但想知道是否有更多的 pandas 方式也可以比我的解决方案更快地处理 10000x3000 行。

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

SLA = {'Wertebereich': [5, 10, 15, 20, 25]}
SLA = pd.DataFrame(data=SLA)


messwerte = pd.DataFrame(np.random.randint(0,30,size=10),
columns=["Messwerte"],
index=pd.date_range("20180101", periods=10))


#print(SLA.to_string())
#print(messwerte.to_string())


###############
SLA["Count"] = 0

for i in range(0, len(SLA)-1):
counter = 0
treshold_min = SLA.iloc[i].get('Wertebereich')
treshold_max = SLA.iloc[i+1].get('Wertebereich')
for x in range(0, len(messwerte)):
val = messwerte.iloc[x].get('Messwerte')
print('---- ' + str(val) )
if ((val >= treshold_min) & (val < treshold_max)):
counter = counter +1

SLA.ix[i,'Count'] = counter

print(SLA.to_string())
print(messwerte.to_string())

任何想法都会受到赞赏。

谢谢!

最佳答案

试试这个:

messwerte['Messwerte'].value_counts(bins=SLA['Wertebereich'])

输出:

(20.0, 25.0]     5
(4.999, 10.0] 2
(10.0, 15.0] 1
(15.0, 20.0] 0
Name: Messwerte, dtype: int64

关于python - pandas 计数范围在两个数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60308403/

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