如何计算两列中唯一字符串的数量?

时间:2014-01-20 17:07:32

标签: python pandas

我有一个包含两个包含字符串的列的DataFrame,例如:

  

col1 --- col2
  恩斯特---吉姆   彼得---恩斯特   比尔--- NaN
  NaN ---道格
  吉姆---杰克

现在我想在第一列和第二列中创建一个包含唯一字符串列表的新DataFrame,这两个原始列中每个字符串的出现次数如下:

  

str --- 出现
  恩斯特--- 2
  彼得--- 1   比尔--- 1   吉姆--- 2   杰克--- 1   道格--- 1

如何以最有效的方式实现这一目标?谢谢!

  

3 个答案:

答案 0 :(得分:6)

首先将原来的两列合并为一列:

In [127]: s = pd.concat([df.col1, df.col2], ignore_index=True)

In [128]: s
Out[128]: 
0    Ernst
1    Peter
2     Bill
3      NaN
4      Jim
5      Jim
6    Ernst
7      NaN
8     Doug
9     Jake
dtype: object

然后使用value_counts

In [129]: s.value_counts()
Out[129]: 
Ernst    2
Jim      2
Bill     1
Doug     1
Jake     1
Peter    1
dtype: int64

答案 1 :(得分:0)

我会这样做(假设您从文件your_file.txt获取数据并且想要打印出结果):

from collections import Counter;

separator = ' --- '
with open('your_file.txt') as f:
    content = f.readlines()  # here you got a list of elements corresponding to the lines
    people = separator.join(content).split(separator) # here you got a list of all elements
    people_count = Counter(people) # you got here a dict-like object with key=name value=count
    for name, val in people_count.iteritems():
        # print the column the way you want
        print '{name}{separator}{value}'.format(name=name, separator=separator, value=val)

该示例使用Counter对象,该对象允许您从迭代中有效地计算元素。其余的代码只是字符串操作。

答案 2 :(得分:0)

试试这个:

df = pd.DataFrame({"col1" : ["Ernst", "Peter","Bill",np.nan,"Jim"],
 "col2" : ["Jim","Ernst",np.nan,"Doug","Jake"]})
print df
df1 = df.groupby("col1")["col1"].count()
df2 = df.groupby("col2")["col2"].count()
print df1.add(df2,fill_value=0)