首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在列上使用groupby和追加值

在列上使用groupby和追加值
EN

Stack Overflow用户
提问于 2022-02-03 10:55:23
回答 1查看 104关注 0票数 1

考虑以下csv文件,其中" name“列中有一个重复的名称:

代码语言:javascript
复制
ID,Name,T,CA,I,C,IP
129,K1,1.2,64,386,5522,0.07
6,K1,1.1,3072,28800,6485,4.44
157,K2,1.1,512,1204,3257,0.37

我想按名称对行进行分组,并记录如下I和C列

代码语言:javascript
复制
K1:
     0   I   386  28800
     1   C   5522 6485
K2:
     0   I   1204
     1   C   3257

我已经编写了这段代码,它根据名称列对行进行分组,并构建一个字典。

代码语言:javascript
复制
data = {'Value':[0,1]}
kernel_df = pd.DataFrame(data, index=['C','I'])
my_dict = {'dummy':kernel_df}
df = pd.read_csv('test.csv', usecols=['Name', 'I', 'C'])
for name, df_group in df.groupby('Name'):
    my_dict[name] = pd.DataFrame(df_group)
print(my_dict)

但输出是

代码语言:javascript
复制
{'dummy':    Value
C      0
I      1, 'K1':   Name      I     C
0   K1    386  5522
1   K1  28800  6485, 'K2':   Name     I     C
2   K2  1204  3257}

如您所见,I和C是用列编写的,因此每个键的行都会增加。这与我想要的正好相反。我怎么才能解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-03 10:59:51

我想你需要选择带有转置的列。我不使用dict理解,因为在您的代码中将新的DataFrame添加到现有的dict中:

代码语言:javascript
复制
data = {'Value':[0,1]}
kernel_df = pd.DataFrame(data, index=['C','I'])
my_dict = {'dummy':kernel_df}

for name, df_group in df.groupby('Name'):
    my_dict[name] = df_group[[ 'I', 'C']].T
print(my_dict['K1'])
      0      1
I   386  28800
C  5522   6485

如果有必要增加新列:

代码语言:javascript
复制
data = {'Value':[0,1]}
kernel_df = pd.DataFrame(data, index=['C','I'])
my_dict = {'dummy':kernel_df}

for name, df_group in df.groupby('Name'):
    my_dict[name] = df_group[[ 'I', 'C']].T.rename_axis('g').reset_index()
print(my_dict['K1'])
   g     0      1
0  I   386  28800
1  C  5522   6485
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70970021

复制
相关文章

相似问题

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