计算数据帧中列每一行中数组的每个唯一数组

时间:2019-10-15 10:37:21

标签: python arrays pandas dataframe unique

我正在练习熊猫和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

非常感谢您。

2 个答案:

答案 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.explodeSeries.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