我得到了这个数据帧:
person_code #CNAE growth size
0 231 32 0.54 32
1 233 43 0.12 333
2 432 32 0.44 21
3 431 56 0.32 23
4 654 89 0.12 89
5 764 32 0.20 211
6 434 32 0.82 90
我需要创建一个名为“top3growth”的新专栏。为此,我需要为每一行检查df的#CNAE,并添加一个额外的列,指出该CNAE增长最快的3个人(它将在df dataframe中添加一个dataframe)。要创建“top3dfs”,我使用这个groupby:
a=sql2.groupby('#CNAE',group_keys=False).apply(pd.DataFrame.nlargest,n=3,columns='growth')
(这个解决方案来自this question。)
应该是这样的:
person_code #CNAE growth size top3growth ...
0 . 231 32 0.54 32 [df_top3_type_32]
1 . 233 43 0.12 333 [df_top3_type_43]
2 . 432 32 0.44 21 [df_top3_type_32]
3 . 431 56 0.32 23 [df_top3_type_56]
4 . 654 89 0.12 89 [df_top3_type_89]
5 . 764 32 0.20 211 [df_top3_type_32]
6 . 434 32 0.82 90 [df_top3_type_32]
...
df\u top3\u type\u 32应如下所示(例如):
person_code #CNAE growth size
6 . 434 32 0.82 90
0 . 231 32 0.54 32
2 . 432 32 0.44 21
我试图通过以下方法解决我的问题:
df['top3growth']=np.nan
for i in df.index:
df['top3growth'].loc[i]=a[a['#CNAE'] == df['#CNAE'].loc[i]]
但我得到了:
ValueError: Incompatible indexer with DataFrame
有人知道发生了什么事吗? 有没有更有效的方法(不使用for循环)?你知道吗
有一种方法,把a转换成dict,然后把它映射回来
创建新列后,如果要将单个单元格转换回数据帧
相关问题 更多 >
编程相关推荐