Python 转换数据帧列中的值

Python 转换数据帧列中的值,python,pandas,Python,Pandas,我想创建一个数据帧,其中包含df1中转置的“atoms”列的值,以便生成的数据帧看起来像df2 df1: df2: 有没有办法用熊猫来达到这个目的? 为此,我使用groupby,如下所示: df2 = pd.DataFrame(columns=['name','a0','a1','a2','a3','a4'], index=np.arange(9)) c = df1.groupby('name') df2['name'] = df1['name'] for mol in df1.name.

我想创建一个数据帧,其中包含df1中转置的“atoms”列的值,以便生成的数据帧看起来像df2

df1: df2: 有没有办法用熊猫来达到这个目的? 为此,我使用groupby,如下所示:

df2 = pd.DataFrame(columns=['name','a0','a1','a2','a3','a4'], index=np.arange(9))

c = df1.groupby('name')

df2['name'] = df1['name']

for mol in df1.name.unique():

    df2.iloc[c.indices[mol],np.arange(1,len(c.indices[mol]) +1)] = c.get_group(mol)['atoms'].values

但我觉得应该有一种更简单、更快的方法来实现这一点。

这主要是一个
交叉表,但还有一些额外的步骤

u = df.assign(key=df.groupby('name').cumcount()).set_index('name')

i = pd.crosstab(u.index, u['key'], u['atoms'], aggfunc='first')

# Cleanup and formatting
i.reindex(u.index).add_prefix('a').rename_axis(None, axis=1).reset_index()


@Akaisteph7这个问题足够具体,可以讨论堆栈溢出的主题。代码评审更喜欢有更多上下文的问题。请看,谢谢。你的代码比我的代码花费的时间少40%。
df2 = pd.DataFrame(columns=['name','a0','a1','a2','a3','a4'], index=np.arange(9))

c = df1.groupby('name')

df2['name'] = df1['name']

for mol in df1.name.unique():

    df2.iloc[c.indices[mol],np.arange(1,len(c.indices[mol]) +1)] = c.get_group(mol)['atoms'].values
u = df.assign(key=df.groupby('name').cumcount()).set_index('name')

i = pd.crosstab(u.index, u['key'], u['atoms'], aggfunc='first')

# Cleanup and formatting
i.reindex(u.index).add_prefix('a').rename_axis(None, axis=1).reset_index()
  name a0 a1 a2 a3   a4
0  CH4  C  H  H  H    H
1  CH4  C  H  H  H    H
2  CH4  C  H  H  H    H
3  CH4  C  H  H  H    H
4  CH4  C  H  H  H    H
5  NH3  N  H  H  H  NaN
6  NH3  N  H  H  H  NaN
7  NH3  N  H  H  H  NaN
8  NH3  N  H  H  H  NaN