在数据帧上进行分组,并将其分配回原始数据框,但转换失败

2024-09-29 04:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下dataframe,在列中有某些值:ID'repeating。 我想按数据场分组

 df = pd.DataFrame(
    {'Score': [0.65, 0.57, 0.56, 0.689, 0.56, 0.85, 0.45, 0.15, 0.14, 0.4678], 
    'ID': ['AAA', 'BBB', 'SAS', 'SAP', 'TCS', 'BBB', 'CTC', 'CTC', 'CTC', 'CTC'], 
    'Sample': ['AE01', 'AE01', 'AE03', 'AE03', 'AE03', 'AE05', 'AE05', 'AE05', 'AE05', 'AE05'], 
    'Freq': [1, 14, 14, 15, 16, 17, 18, 19, 20, 21], 
    'Type': ['Non', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND', 'IND']},
    columns=['Sample','ID','Type','Score','Freq'])

当我试图向groupby选项添加'Re'列时,通过使用transform跟随一行代码,将其分配给原始数据帧df

df['Re']=df.drop_duplicates(['Sample','ID']).groupby(['ID']).transform(size)

我有以下错误

ValueError: Wrong number of items passed 4, placement implies 1

我知道我可以做merge来获得由结果分配给组的原始数据帧,但是当我做merge时,我会得到某些行,它们在原始df中重复多次,这是我不需要的。任何更好的解决方案都会很好。 谢谢


Tags: samplereiddftypetransformscorebbb
1条回答
网友
1楼 · 发布于 2024-09-29 04:25:56

我认为您需要首先分配给drop_duplicates的新DataFrame输出,因为显然^{}删除了一些重复的行(如果存在),所以不能将新列Re分配给原始的df。你知道吗

另一个问题是groupby需要将Series添加到[],因为transform只处理Series。如果使用size,您可以使用一些不用于分组的列,这里是ID。你知道吗

df = df.drop_duplicates(['Sample','ID'])
df['Re']= df.groupby(['ID'])['Sample'].transform('size')
print (df)
  Sample   ID Type  Score  Freq  Re
0   AE01  AAA  Non  0.650     1   1
1   AE01  BBB  IND  0.570    14   2
2   AE03  SAS  IND  0.560    14   1
3   AE03  SAP  IND  0.689    15   1
4   AE03  TCS  IND  0.560    16   1
5   AE05  BBB  IND  0.850    17   2
6   AE05  CTC  IND  0.450    18   1

df = df.drop_duplicates(['Sample','ID'])
df['Re']= df.groupby(['ID'])['Type'].transform('size')
print (df)
  Sample   ID Type  Score  Freq  Re
0   AE01  AAA  Non  0.650     1   1
1   AE01  BBB  IND  0.570    14   2
2   AE03  SAS  IND  0.560    14   1
3   AE03  SAP  IND  0.689    15   1
4   AE03  TCS  IND  0.560    16   1
5   AE05  BBB  IND  0.850    17   2
6   AE05  CTC  IND  0.450    18   1

如果不赋值,则获取NaN

df['Re']= df.drop_duplicates(['Sample','ID']).groupby(['ID'])['Sample'].transform('size')
print (df)
  Sample   ID Type   Score  Freq   Re
0   AE01  AAA  Non  0.6500     1  1.0
1   AE01  BBB  IND  0.5700    14  2.0
2   AE03  SAS  IND  0.5600    14  1.0
3   AE03  SAP  IND  0.6890    15  1.0
4   AE03  TCS  IND  0.5600    16  1.0
5   AE05  BBB  IND  0.8500    17  2.0
6   AE05  CTC  IND  0.4500    18  1.0
7   AE05  CTC  IND  0.1500    19  NaN
8   AE05  CTC  IND  0.1400    20  NaN
9   AE05  CTC  IND  0.4678    21  NaN

相关问题 更多 >