Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算两列中唯一字符串的数量?_Python_Pandas - Fatal编程技术网

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

Python 如何计算两列中唯一字符串的数量?,python,pandas,Python,Pandas,我有一个数据框,其中有两列包含字符串,如: col1-col2 恩斯特-吉姆 彼得·恩斯特 比尔·南 南道格 吉姆·杰克 现在我想创建一个新的DataFrame,在第一列中有一个唯一字符串列表,在第二列中有两个原始列中每个字符串的出现次数,如: str发生率 Ernst-2 彼得-1 条例草案-1 吉姆-2 杰克-1 道格-1 我如何以最有效的方式做到这一点?谢谢 假设您从文件your_file.txt获取数据,并希望打印出结果,我会这样做: from collections import Co

我有一个数据框,其中有两列包含字符串,如:

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

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

str发生率 Ernst-2 彼得-1 条例草案-1 吉姆-2 杰克-1 道格-1

我如何以最有效的方式做到这一点?谢谢


假设您从文件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)

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

我会这样做,假设您从文件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)

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

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

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
然后使用值_计数:


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

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
然后使用值_计数:

试试这个:

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)
试试这个:

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)
或者,df.unstack.value_计数。如果框架中有更多的列,而不仅仅是col1和col2,那么您应该先选择它们。哦,这也很好。df.stack.value\u计数给出相同的值。或者,df.unstack.value\u计数。如果框架中有更多的列,而不仅仅是col1和col2,那么您应该先选择它们。哦,这也很好。df.stack.value_计数给出了相同的结果。