python - 根据条件在 Pandas 数据框中迭代和赋值
问题描述
我有一个由 8 列组成的 pandas 数据框(c1
到c7
,最后一个被称为total
)。是和。c1
_c7
0
1
列总计应该是对 1 内序列中最大数量 1 的c1
赋值c7
。c1
代表c7
工作日,因此 7 应翻转为 1。
例如,如果我们有像 df 这样的初始数据框:
| c1 | c2 | c3 | c4 | c5 | c6 | c7 | total |
|:---|:---|:---|: --|:---|:---|:---|:-----:|
| 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 |
| 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
我最初的想法是创建一个带有 if 语句的循环,以评估列中的条件并将值分配给列总计。
i = "c1"
d =
for i in df.iloc[:,0:7]:
if df[i] == 1 and df[i-1] == 1:
df["total"]:= df["total"] + 1
我希望 df 看起来像:
| c1 | c2 | c3 | c4 | c5 | c6 | c7 | total |
|:---|:---|:---|: --|:---|:---|:---|:-----:|
| 1 | 1 | 1 | 1 | 1 | 0 | 0 | 5 |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
| 1 | 1 | 0 | 1 | 1 | 0 | 0 | 2 |
| 1 | 1 | 1 | 0 | 1 | 1 | 1 | 6 |
| 1 | 0 | 1 | 1 | 1 | 0 | 1 | 3 |
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 2 |
| 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
我无法得到结果,正在尝试逐步构建,但在 if 语句评估中不断出错
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
解决方案
df = pd.DataFrame([[ 1,1,1,1,1,0,0], [0,0,1,0,0,0,0],[1,1,0,1,1,0,0]])
def fun(x):
count = 0;
result = 0;
n = len(x)
for i in range(0,2*n):
if x[i % n] == 0:
result = max(result, count)
count = 0
else:
count += 1
return result
df['total'] = df.apply(lambda x: fun(x), axis=1)
0 1 2 3 4 5 6 total
0 1 1 1 1 1 0 0 5
1 0 0 1 0 0 0 0 1
2 1 1 0 1 1 0 0 2
循环中的错误
df[i-1]
当 i==0 时会抛出错误df[i]
给出所有行的第 i 列的值7 should then flip to 1
:您的代码中缺少这部分
要将行的尾部 (7) 翻转回头部 (1),请将行的副本放在尾部,然后检查本构 1。这也可以通过将行循环两次并使用模运算符来完成。检查此算法以获取更多详细信息
推荐阅读
- java - 处理文件上传在 Primefaces 6.2 中不起作用
- html - 如何最小化 HTML 表格单元格的顶部和底部“填充”?
- html - SVG元素的CSS背景
- ios - 加载群组频道 Sendbird 时加载频道错误 800101
- java - 创建 Jar 文件后如何在我的应用中显示图像?
- wordpress - 更改 WooCommerce 类别分页 slug/永久链接
- python-3.x - 带过滤器的列中的最大值
- javascript - 如何播放对话流的输出音频(int数组)
- php - EAV(实体-属性-值)数据建模/自定义数据库字段
- mysql - Mysql - 按两列排序,但有一个条件