gpt4 book ai didi

Python 与 dataframe 的复杂操作

转载 作者:行者123 更新时间:2023-12-01 08:51:31 25 4
gpt4 key购买 nike

我有以下数据框:

> df = pd.DataFrame({'A':[1,1,1,1,0],'B':[1,0,1,1,0],'C':[1,1,1,0,0],'D':[1,1,0,0,0],'E':[1,0,0,0,0]})
> print(df)
A B C D E
0 1 1 1 1 1
1 1 0 1 1 0
2 1 1 1 0 0
3 1 1 0 0 0
4 0 0 0 0 0

我想生成一个具有相同列的新数据框,其执行以下操作:

对于每个单元格,如果该行左侧的所有单元格都等于 1,则为 1,否则为 0。

因此给定示例的输出应如下所示:

> df = pd.DataFrame({'A':[1,1,1,1,0],'B':[1,0,1,1,0],'C':[1,0,1,0,0],'D':[1,0,0,0,0],'E':[1,0,0,0,0]})
> print(df)
A B C D E
0 1 1 1 1 1
1 1 0 0 0 0
2 1 1 1 0 0
3 1 1 0 0 0
4 0 0 0 0 0

我正在寻找一种通用代码,可以为所有大小的所有数据帧复制该代码。

我进行了谷歌搜索并尝试自己编写代码,但没有得到任何令人满意的结果。

另一个示例 - 行级别的转换如下所示:

1,1,1,0,1,1,0,0,1 -> 1,1,1,0,0,0,0,0,0,

谢谢!

最佳答案

您可以定义一个简单的函数来查找出现 0 的第一个索引,并返回一个用 1 填充到该位置的数组。还需要考虑没有零的行并发送回全 1。

def findOnes(x):
res = np.zeros(len(x))
fstZero = np.where(x==0)[0]
if len(fstZero) == 0:
return res+1
return res[:np.min(fstZero)]=1

然后这个函数就可以应用到原始的dataframe上。

dfNew = df.apply(findOnes, axis=1, result_type='broadcast')

这将给出所需的输出:

print(dfNew)
A B C D E
0 1 1 1 1 1
1 1 0 0 0 0
2 1 1 1 0 0
3 1 1 0 0 0
4 0 0 0 0 0

因此,在完整解决方案之上使用您的数据看起来像

import pandas as pd
import numpy as np

def findOnes(x):
res = np.zeros(len(x))
fstZero = np.where(x==0)[0]
if len(fstZero) == 0:
return res+1
return res[:np.min(fstZero)]=1

df = pd.DataFrame({'A':[1,1,1,1,0],'B':[1,0,1,1,0],'C':[1,1,1,0,0],
'D':[1,1,0,0,0],'E':[1,0,0,0,0]})

dfNew = df.apply(findOnes, axis=1, result_type='broadcast')

关于Python 与 dataframe 的复杂操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53084688/

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