python - 如何计算循环数据框中满足条件的值?
问题描述
我有一个df
带有系列 inDistanz
和系列 in的熊猫Zielcode
。我需要将 Distanz 除以重复的间隔数。所以第一个不为零的间隔将除以one
,第二个除以three
,第三个除以two
。
Distanz Zielcode
0.0 0
0.0 0
1.1 2
0.0 0
8.0 7
8.0 7
8.0 7
0.0 0
3.4 1
3.4 1
0.0 0
如何计算整个系列中满足此重复条件的间隔数并将值 distanz 除以该计数?
所需的输出应如下所示:
Distanz Zielcode Distanz - Output
0.0 0 0.0
0.0 0 0.0
1.1 2 1.1
0.0 0 0.0
8.0 7 2.7
8.0 7 2.7
8.0 7 2.7
0.0 0 0.0
3.4 1 1.7
3.4 1 1.7
0.0 0 0.0
解决方案
我会把问题分成不同的步骤。
识别重复元素:
block = ((df['Distanz'].shift() != df['Distanz']) | (df['Zielcode'].shift() != df['Zielcode'])).cumsum()
这给出了:
0 1 1 1 2 2 3 3 4 4 5 4 6 4 7 5 8 6 9 6 10 7 dtype: int32
计算每个块的大小:
count = df.groupby(block).apply(lambda x: x.assign(count=len(x)) )['count'].reset_index(level=0, drop=True)
这给出了:
0 2 1 2 2 1 3 1 4 3 5 3 6 3 7 1 8 2 9 2 10 1 Name: count, dtype: int64
计算新列:
df['Distanz - Output'] = df['Distanz'] / count
数据框变为:
Distanz Zielcode Distanz - Output
0 0.0 0 0.000000
1 0.0 0 0.000000
2 1.1 2 1.100000
3 0.0 0 0.000000
4 8.0 7 2.666667
5 8.0 7 2.666667
6 8.0 7 2.666667
7 0.0 0 0.000000
8 3.4 1 1.700000
9 3.4 1 1.700000
10 0.0 0 0.000000
推荐阅读
- google-apps-script - 如何让这个脚本运行得更快?
- javascript - 将两个重复添加到 javascript 中所有数字组合的生成列表中
- android - NotificationListenerService - 调用 stopService() 时服务不会停止
- grafana - 如何在 grafana 的状态面板中显示来自 influxdb 的两个测量值的总和
- r - R - 通过键对连接数据表
- wso2 - WSO2 3.1.0 APIM 实例。是否可以通过 deployment.toml 文件将 WSO2_CARBON_DB 数据源配置为 oracle 配置?
- windows - powershell脚本检查互联网连接然后做如果其他
- ruby-on-rails - Rails 查询相互连接的模型以命中方法
- microsoft-edge - MS Edge 是否支持 CSS 自定义属性
- google-apps-script - 使用 Gmail 的 Google Sheet Script 时如何确定电子邮件的大小?