【发布时间】:2019-07-27 19:21:18
【问题描述】:
我有一个由 8 列组成的 pandas 数据框(c1 到 c7,最后一个称为 total)。 c1 到 c7 是 0 和 1。
列总数应为c1 到c7 内的序列中的最大数1 的赋值。 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()。
【问题讨论】:
-
最后一行的预期结果不应该是 1 吗?如果是2,你能解释一下为什么吗?
-
是的,很抱歉,确实是 1