首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据集中的记录过滤为retention1数据和retention2数据的实用工具

将数据集中的记录过滤为retention1数据和retention2数据的实用工具
EN

Stack Overflow用户
提问于 2021-08-21 04:18:48
回答 2查看 51关注 0票数 0

我想根据下面的条件对现有的数据进行过滤。这是数据集。还有几个附加的条件,我正在设法找到解决办法。

完整数据集

条件:

我需要将它们分类为retention1、retention2或两者兼而有之。如果值在retention1中,而retention2记录都为None,则在retention1中对其进行分类。类似地,对于retention2,retention2列有值,retention1没有值。但是对于混合保留--对于每个“名称”记录,您可以将retention1作为None,retention2为None。但是列的有效值应该是retention1或retention2,如数据集中所示。分类时,将集群ID与AZ_URL进行比较。如果集群ID位于AZ_URL的第二部分,那么正确的值就是retention1或retention2的第一个元素。将集群ID与AZ_URL进行比较。如果集群ID位于AZ_URL的第一部分,那么正确的值是retention1或retention2的第二个元素。

Retention1:名称def,有两个记录,retention2的值为None,retention1为3;4和3;1,所以检查AZ_URL中的clusterID,因为它位于AZ_URL的第一部分,在下面的输出记录中保留1的第二部分。

Retention1

Retention2:关于rls,clusterID bn4323在AZ_URL的第二部分。因此,提取第一部分的retention2 -7和第一部分快照保留-每月.

Retention2

混合保留:名称abc,cgh来混合保留,因为他们都有两个记录和record1有retention1不是无(和retention2是无)和record2有retention2而不是无( retention1是无)

混合保留

我试着用熊猫来编写下面的代码,但是我找不到它的功能。

Retention1计算:

代码语言:javascript
复制
m=df['retention1'].notna()
n=df['retention2'].notna() 

df3=df.loc[m & ~n,['Name', 'ClusterID','Az_URL','retention1']].dropna(axis=1)

df3['retention1']=df3['retention1'].str.extract(r'(\d+)',expand=False)

Retention2计算:

代码语言:javascript
复制
df=df.replace({'None':None})
m=df['retention1'].notna()
n=df['retention2'].notna() 

df4=df.loc[n & ~m,['Name', 'ClusterID','Az_URL','retention2', 'retention snapshot']].dropna(axis=1)

df4['retention2']=df4['retention2'].str.extract(r'(\d+)',expand=False)
df4['retention2']=df4['retention2'].str.extract(r'([a-zA-Z ]+)',expand=False)

混合保持率计算:

代码语言:javascript
复制
df=df.replace({'None':None})
m=df['retention1'].notna()
n=df['retention2'].notna() 

df_merge = df.groupby("name").agg(lambda x['retention1']: list(['retention1']))

我需要一些建议来改进这些新的数据格式,lambda,因为它将有助于更好地填充报告。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-21 04:31:18

您可以通过loc尝试,因为在'retension1‘和'retension2’中没有备用的,所以一个条件就可以了:

代码语言:javascript
复制
df=df.replace({'None':None})
m=df['retention1'].notna()
#m=(df['retention1'].notna()) & (df['retention2'].isna())
df1=df.loc[m].dropna(axis=1)
df1['retention1']=df1['retention1'].str.extract(r'(\d+)',expand=False)
df2=df.loc[~m].dropna(axis=1)
df2['retention2']=df2['retention2'].str.extract(r'(\d+)',expand=False)

df1输出

代码语言:javascript
复制
  Name Policy retention1
0  abc    123          5
1  cgh    789          1

df2输出

代码语言:javascript
复制
  Name Policy retention2
0  abc    456          6
1  cgh    675          2
票数 0
EN

Stack Overflow用户

发布于 2021-08-21 04:29:38

你的意思是:

代码语言:javascript
复制
>>> retention1 = df.loc[df['retention1'].notna()].drop('retention2', axis=1).reset_index(drop=True)
>>> retention1['retention1'] = retention1['retention1'].str.extract('(\d)')
>>> retention1
  Name Policy retention1
0  abc    123          5
1  cgh    789          1
>>> retention2 = df.loc[df['retention2'].notna()].drop('retention1', axis=1).reset_index(drop=True)
>>> retention2['retention2'] = retention2['retention2'].str.extract('(\d)')
>>> retention2
  Name Policy retention2
0  abc    456          6
1  cgh    675          2
>>> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68870093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档