在列中使用 groupby 和追加值
Using groupby and append values at columns
考虑以下 csv 文件,其中“名称”列中的名称重复:
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 列
K1:
0 I 386 28800
1 C 5522 6485
K2:
0 I 1204
1 C 3257
我编写了这段代码,它按名称列对行进行分组并构建字典。
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)
但是输出是
{'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 写在列中,因此每个键的行数增加了。这与我想要的相反。我该如何解决?
我认为您需要 select 列转置。我不使用字典理解,因为在您的代码中向现有字典添加了新的 DataFrame:
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
如果需要新列:
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
考虑以下 csv 文件,其中“名称”列中的名称重复:
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 列
K1:
0 I 386 28800
1 C 5522 6485
K2:
0 I 1204
1 C 3257
我编写了这段代码,它按名称列对行进行分组并构建字典。
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)
但是输出是
{'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 写在列中,因此每个键的行数增加了。这与我想要的相反。我该如何解决?
我认为您需要 select 列转置。我不使用字典理解,因为在您的代码中向现有字典添加了新的 DataFrame:
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
如果需要新列:
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