gpt4 book ai didi

python - 根据条件在 Pandas 数据框中迭代并分配值

转载 作者:行者123 更新时间:2023-12-01 07:30:19 25 4
gpt4 key购买 nike

我有一个由 8 列组成的 pandas 数据框(c1c7,最后一个称为 total)。 c1c701

列总计应该是 c1c7 内序列中最大数量 1 的分配。 c1c7 代表工作日,因此 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: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or 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

循环中的错误

  1. df[i-1] 当 i==0 时会抛出错误
  2. df[i] 给出所有行第 i 列的值
  3. 7 应翻转为 1:您的代码中缺少这部分

要将行的尾部 (7) 翻转回头 (1),请将行的副本放在尾部,然后检查是否有组成型 1。这也可以通过循环该行两次并使用模运算符来完成。检查这个algorithm了解更多详情

关于python - 根据条件在 Pandas 数据框中迭代并分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57235366/

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