在Pandas Python中使用Dataframe Comprehension创建新的Dataframe

4

我对Pandas还比较陌生,但是想要根据名称为Mel的条件从一个dataframe创建另一个dataframe。通过打印出来的索引号,看起来我的新dataframe只是旧dataframe的指针。

本质上,我正在寻找与此等效的方法:

BabyDataSet = [['Bob', 968], ['Jessica', 155], ['Mary', 77], ['John', 578], ['Mel', 973]]
filtered_list = [x for x in BabyDataSet if x[0] == 'Mel']
print filtered_list
df = pd.DataFrame(data=filtered_list, columns=['Names', 'Births'])
print df

我的代码:

import pandas as pd

BabyDataSet = [['Bob', 968], ['Jessica', 155], ['Mary', 77], ['John', 578], ['Mel', 973]]
#create dataframe
df = pd.DataFrame(data=BabyDataSet, columns=['Names', 'Births'])

#create a new dataframe for Bob
new_df = df.ix[['Mel' in x for x in df['Names']]]
print new_df
1个回答

3

无需遍历df,只需将布尔条件传递给过滤器df:

In [216]:
new_df = df[df['Names']=='Mel']
new_df

Out[216]:
  Names  Births
4   Mel     973

编辑

要重置索引,请调用reset_index(),至于new_df是否是原始数据框的引用,不是:

In [224]:
new_df = df[df['Names']=='Mel']
new_df = new_df.reset_index()
new_df

Out[224]:
   index Names  Births
0      4   Mel     973

In [225]:    
new_df['Names'] = 'asdas'
df

Out[225]:
     Names  Births
0      Bob     968
1  Jessica     155
2     Mary      77
3     John     578
4      Mel     973

这里的索引仍然是4。这是否意味着如果我更改df,new_df也会更改?我该如何将new_df的索引重新从0开始? - user2242044
你可以调用 reset_index(),请看我的更新,它不会影响原始数据框。 - EdChum
如果我想使用contains而不是==,该怎么办? - user2242044
df[df['Names'].str.contains('Mel')] - EdChum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接