2017-06-01 121 views
0

我有以下結構的數據幀:轉換單指數大熊貓數據幀到多指數

df.columns 
Index(['first_post_date', 'followers_count', 'friends_count', 
     'last_post_date','min_retweet', 'retweet_count', 'screen_name', 
     'tweet_count', 'tweet_with_max_retweet', 'tweets', 'uid'], 
     dtype='object') 

鳴叫內部系列,每個小區是一個包含所有鳴叫的另一個數據幀用戶。

df.tweets[0].columns 
Index(['created_at', 'id', 'retweet_count', 'text'], dtype='object') 

欲該數據幀轉換成一個多幀索引,基本上通過破壞含有鳴叫的單元格。一個索引將是uid,另一個將會是id裏面的tweet

我該怎麼做?

link to sample data

+0

你能不能做這樣的事'df_tweets = { 'created_at':一, 'ID':B, 'retweet_count' C:「文本:d1'然後你的主'df'做'DF = { ...'推文':df2'...}'?我誤解了你所要求的無視這一點。 – quantik

+0

你可以發佈樣本數據嗎? –

+0

@AndrewL,我添加了示例數據。 – Rakib

回答

0

所以從DF,您有包含DF鳴叫的鳴叫列,所以我創建了一個tweets_df數據幀和Concat的在鳴叫所有使用df tweets_df,添加UID列知道哪個uid與鳴叫屬於,然後將uid的信息合併到tweets_df以進一步處理(如果需要)。如果您需要進一步修改,請評論。很難獲取您的示例數據並轉換爲json。所以我就這樣猜測,希望它仍然給你一些想法。

import pandas as pd 

df = .... #your df 

tweets_df = pd.DataFrame() #create blank df to contain tweets 

# explode tweets to df 
## loop each uid 
for uid in df['uid']: 
    temp = df.loc[df['uid']==uid, :] # select df by uid 
    temp = temp['tweets'].iloc[0] # select tweets column -> df 
    temp['uid'] = uid # add uid column to know tweets belong to which uid 
    tweets_df = pd.concat([results, temp], ignore_index=True) # concat to container df 

# get a uid info df from starting df 
uid_info_column = df.columns 
uid_info_column.remove('tweets') 
uid_info_df = df.loc[:, uid_info_column] 


# merge info on uid with tweets_df 
final = pd.merge(left=tweets_df, right=uid_info_df, on='uid', how='outer')