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