如何在Pandas中做两个不同的列?

时间:2016-10-29 22:11:20

标签: python pandas

我的数据框如下:

>>> df
     0   1   2    3  4  5
  0  1   2   3  1.0  A  B
  1  2   5   6  1.0  A  B
  2  1   7   8  NaN  C  A
  3  2  10  11  1.0  B  B

我想计算第0列中每个值的唯一值相对于两列--4和5的次数。例如,在上面的情况下,输出将是这样的

     0   1   
  0  1   3   
  1  2   2   

因为对于第0列中的值1,第4列和第5列中的唯一值的数量是A,B,C,而对于值2,仅为A,B。

3 个答案:

答案 0 :(得分:3)

您可以groupby第0列,展平第4列和第5列的值,然后计算唯一值的数量:

import pandas as pd
import numpy as np
df.groupby("0")[['4', '5']].apply(lambda g: len(np.unique(g.values.flatten())))


#0
#1    3
#2    2
#dtype: int64

答案 1 :(得分:2)

融合您的数据框,将'0'作为索引(如列)和['4', '5']作为值列。然后分组'0'并计算生成的value系列的唯一值:

pd.melt(df, '0', ['4', '5']).groupby('0').value.nunique()
Out[69]: 
0
1    3
2    2

答案 2 :(得分:0)

要从数据框中获取所选列中的唯一值

import pandas as pd

df2=pd.DataFrame()

df = pd.DataFrame({'a':[0,1,2,2,4], 'b':[1,1,1,2,2], 'c':'abc','def','abc','efg','hij']})

df2 = df[['b', 'c']].drop_duplicates().sort_values(['b', 'c'])

print(df2)