问题描述
假设我想为pandas数据框执行类似的操作:
In [247]: import pandas as pd
In [248]: df = pd.DataFrame([[1, 2],[3, 4],[3,4],[3,4],[5,6]])
In [249]: df
Out[249]:
0 1
0 1 2
1 3 4
2 3 4
3 3 4
4 1 2
我想得到一个输出,告诉我第一行与第二行不同,第二行重复3次,然后第四行再次重复一次。 所以这样的输出
In [250]: (1, 3, 1)
什么是在python 2.7中实现这个(和快速)的pythonic方法?
1楼
这是一种方式。 我称之为pythonic而不是pandonic。
from itertools import groupby
dups = [sum(1 for _ in group) for _, group in groupby(zip(df[0], df[1]))]
2楼
使用join
和value_counts
s=df.astype('str').apply(','.join,1).value_counts(sort=False)
s
Out[275]:
1,2 1
3,4 3
5,6 1
dtype: int64
有了元组
tuple(s.tolist())
Out[278]: (1, 3, 1)
3楼
我真的想保持pandas
所以这是你只能用大熊猫做什么:
values = df.apply(tuple, axis=1)
counts = values.value_counts()
result = values.drop_duplicates().map(counts)
tuple(result)
#(1, 3, 1)