Python Pandas数据框:如何对不同列中的值进行分组

时间:2019-05-05 14:07:04

标签: pandas dataframe multiple-columns

我需要有关清洁数据框的帮助。 数据框如下:

         Gap      Date          Time      Full text   Retweets   Likes
0   3.160003  2018-05-21    03:30:56  @georgechang..  19         462
1   3.160003  2018-05-21    21:15:03  @reveal         141        1610
2   3.160003  2018-05-21    11:25:21  RT @nova_road:  2030       0
3   3.160003  2018-05-21    07:10:01  @MrsYomaddy     48         917
4   3.160003  2018-05-21    07:06:54  @Dani21 @dmatki 40         5367

如您所见,对于所有行,Gap值等于Date值。

我想获得的是以下数据框:

                         num    Time      Full text    Retweets   Likes
    Gap       Date         
0   3.160003  2018-05-21    1     03:30:56  .....        19      462
1                           2     21:15:03  .....        141     1610
2                           3     11:25:21  .....        2030    0 
3                           4     07:10:01  .....        48      917
4                           5     07:06:54  .....        40      5367

其中num是带有推文数量的额外列。

我已经问过类似的问题,但是现在问题有所不同。 链接在这里。 How can I create a multiindex data frame with the following datasets? 具有以下数据集的多索引数据帧

我试图做的是以下代码:

StockbyTweets.set_index(['Date','Gap','Time'],inplace=True)
StockbyTweets

但是我得到的只是这个:

                           Time       Full text    Retweets   Likes
    Gap       Date         
0   3.160003  2018-05-21    03:30:56  .....        19        462
1                           21:15:03  .....        141       1610
2                           11:25:21  .....        2030      0 
3                           07:10:01  .....        48        917
4                           07:06:54  .....        40        5367

如何获得带有推文数量的附加列?

1 个答案:

答案 0 :(得分:0)

set_index是您要寻找的东西:Documents

df.set_index(['Gap','Date'])

没有注意到问题的另一部分。

这是tweets数列:

level_name = df.index.get_level_values(0).tolist()
level_name = [str(i).split(' ')[0] for i in level_name]
level_name = list(set(level_name))

num_of_tweets = {}
for i in level_name:
    df1 = df.loc[i]
    num_of_tweets[i] = len(df1)

df.reset_index(inplace=True)
df['num_of_tweets'] = 0
for key in num_of_tweets.keys():

    df.loc[df['Gap'] == key,'num_of_tweets'] = num_of_tweets[key]

# set the index again.

逻辑有点儿绕圈,可能不是解决此问题的最佳方法。

但是该逻辑可用于获取列的任意组合。