我正在练习熊猫和python,但我不太擅长循环。我有一个数据框,如下所示:假设这是df:
Name Value
A [[A,B],[C,D]]
B [[A,B],[D,E]]
C [[D,E],[K,L],[M,L]]
D [[K,L]]
我想遍历每一行并找到唯一的数组并对它们进行计数。
我尝试过np.unique(a,return_index = True)然后返回两个不同的列表,而我的问题是我不知道如何遍历每个数组。
预期结果将是:
Value Counts
[A,B] 2
[D,E] 2
[K,L] 2
[C,D] 1
[M,L] 1
非常感谢您。
答案 0 :(得分:5)
在熊猫+0.25中使用DataFrame.explode:
df.explode('Value')['Value'].value_counts()
输出:
[K, L] 2
[A, B] 2
[D, E] 2
[C, D] 1
[M, L] 1
Name: Value, dtype: int64
答案 1 :(得分:1)
将Series.explode
与Series.value_counts
一起使用:
df = df['Value'].explode().value_counts().rename_axis('Value').reset_index(name='Counts')
print (df)
Value Counts
0 [D, E] 2
1 [A, B] 2
2 [K, L] 2
3 [C, D] 1
4 [M, L] 1
Numpy解决方案:
a, v = np.unique(np.concatenate(df['Value']),axis=0, return_counts=True)
df = pd.DataFrame({'Value':a.tolist(), 'Counts':v})
print (df)
Value Counts
0 [A, B] 2
1 [C, D] 1
2 [D, E] 2
3 [K, L] 2
4 [M, L] 1