数据重排使用python熊猫|根据重复的索引创建一列并填充列值

时间:2019-02-02 10:31:47

标签: python database pandas csv

将python csv数据重新排列为行和不同的列 我有csv dtabase,其中包含以下格式的名称和朋友列表

enter image description here

预期输出如下: 一行中的“名称和值”,以及根据名称重复的重复列数。

enter image description here

执行此输出的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

IIUC,您需要df.pivot(),然后将值向左移动:

df_new=df.pivot(index='Name',columns='Value',values='Value')\
.apply(lambda x: pd.Series(x.dropna().values), axis=1).fillna(np.nan)
df_new.columns=['value_'+str(i+1) for i in df_new.columns]
print(df_new)

    value_1 value_2 value_3 value_4 value_5 value_6 value_7 value_8 value_9  \
Name                                                                            
Ajay     C529    C530    C531    C532    C533    C534    C535     NaN     NaN   
Djna    A-506   A-507   A-508   A-509   A-510   A-511   A-512   A-513   A-514   
Patc2   B-526   B-527   B-528     NaN     NaN     NaN     NaN     NaN     NaN   

      value_10  
Name            
Ajay       NaN  
Djna     A-515  
Patc2      NaN  

答案 1 :(得分:1)

您也可以使用GROUPBY并创建一个新的数据帧与from_dict

new_dict = (df.groupby('Name')
              .apply(lambda x: list(map(lambda x: x, x['Value'])))
              .to_dict())

new_df = pd.DataFrame.from_dict(new_dict, orient='index')

这会给你:

           0      1      2
Ajay    C529   C530   None
Djna   A-506  A-507  A-508
Patc2  B-526  B-527  B-528