gpt4 book ai didi

python - 用于排列数据框的聚合函数

转载 作者:行者123 更新时间:2023-11-30 22:36:53 28 4
gpt4 key购买 nike

我有以下数据框,

>>> data = pd.DataFrame({'Name': ['CTA15', 'CTA15', 'AC007', 'AC007', 'AC007'], 
'ID': [22, 22, 2, 2, 2],
'Sample':['PE12', 'PL14', 'AE29', 'AE04', 'PE03'],
'count_col' : [2, 2, 3, 3, 3]})

>>> data
ID Name Sample count_col
0 22 CTA15 PE12 2
1 22 CTA15 PL14 2
2 2 AC007 AE29 3
3 2 AC007 AE04 3
4 2 AC007 PE03 3

我需要按如下方式重新排列我的数据框,

 Name       Sample      count_col
CTA15 PE12 2
PL14
AC007 AE10 3
AE29
PE03

我尝试的是,

pd.pivot_table(All_variants_REL,index=["Name",'Sample'],
values=['Count'],aggfunc={'Name':np.size})

但它在计数列中没有显示准​​确的计数任何帮助都会很棒..

最佳答案

看来你需要mask + astypeduplicated 创建的 bool 掩码:

注意:我向 str 添加了强制转换,因为否则会在 count 列中获得混合值(带有整数的字符串),并且某些 pandas 函数可能会被破坏。

注意 1 - 如果 Name 列中的值已排序,则解决方案有效。

cols = ['Name','count']
df[cols] = df[cols].astype(str).mask(df.duplicated(['Name']), '')
print (df)
Name ID Sample count
0 CTA15 22 PE12 2
1 22 PL14
2 AC007 2 AE29 3
3 2 AE04
4 2 PE03

如果需要 NaN 只需省略 , - 但最后一列值将转换为 float (因为 NaN 是 float )

cols = ['Name','count']
df[cols] = df[cols].mask(df.duplicated(['Name']))
print (df)
Name ID Sample count
0 CTA15 22 PE12 2.0
1 NaN 22 PL14 NaN
2 AC007 2 AE29 3.0
3 NaN 2 AE04 NaN
4 NaN 2 PE03 NaN

对于列表可以使用:

cols = ['Name','count', 'ID']
df = df.groupby(cols)['Sample'].apply(list).reset_index()
print (df)
Name count ID Sample
0 AC007 3 2 [AE29, AE04, PE03]
1 CTA15 2 22 [PE12, PL14]

关于python - 用于排列数据框的聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44027533/

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