如何使用熊猫数据框的特定行和列来创建新系列?

时间:2019-11-26 07:02:27

标签: python pandas dataframe series

我正在处理一个如下所示的熊猫数据框:

       title         view_count comment_count like_count    dislike_count   dog_tag cat_tag bird_tag other_tag  
0   Great Dane Loves     299094        752.0      15167          58           [dog]    []       []   [] 
1   Guy Loves His Cat    181320       1283.0      13254         262             []  [cat]       []   []

基本上,标题代表YouTube视频的名称。如果视频是关于狗的,则可以在dog_tag类别下看到[dog]。如果不是关于狗的,则在dog_tag下会看到一个空列表[]。

如果dog_tag的值为[dog] ,我需要为dog_tag的每一行创建一个包含标题,view_count,comment_count,like_count和dislike_count的新系列。我不应该为dog_tag的值为[]的行添加任何信息。

所以,我的新系列应该看起来像这样:

       title         view_count comment_count like_count    dislike_count   dog_tag     
0   Great Dane Loves     299094        752.0      15167          58           [dog]     
1   Dogs are Soo Great!! 181320       1283.0      13254         262           [dog]
2   Dog and Little Girl  562585       5658.3      46589         121           [dog]

是否有任何 天才人物 可以解决此问题?我尝试了以下在Stack Overflow上找到的解决方案,但无法获得所需的:(

only_dog = [dodo_data.loc[:, dodo_data.loc[0,:].eq(s)] for s in ['dog_tag', 'view_count', 'comment_count', 'like_count', 'dislike_count','ratio_of_comments_per_view', 'ratio_of_likes_per_view']]

dodo_data.loc[:,dodo_data.iloc[0, :] == "dog_tag"]
dodo_data.loc[:,dodo_data.iloc[0, :] == "view_count"]
dodo_data.loc[:,dodo_data.iloc[0, :] == "comment_count"]

2 个答案:

答案 0 :(得分:3)

因为如果将空列表转换为布尔值False,则可以将boolean indexingDataFrame.loc一起使用,以按条件和按列名列表进行过滤:

cols = ['title', 'view_count', 'comment_count', 'like_count', 'dislike_count', 'dog_tag']
df = df.loc[df['dog_tag'].astype(bool), cols]

答案 1 :(得分:-1)

您可以尝试以下方法:

import io
dff=io.StringIO("""title,view_count,comment_count,like_count,dislike_count,dog_tag,cat_tag,bird_tag,other_tag 
Great Dane Loves,299094,752.0,15167,58,[dog],[],[],[] 
Guy Loves His Cat,181320,1283.0,13254,262,[],[cat],[],[]""")  

df2=pd.read_csv(dff)

df2 = df2[df2['dog_tag'] == '[dog]']
df2 = df2[df2.columns.drop(list(df2.filter(regex=(r'_tag(?<!dog_tag)'))))]