我的数据框如下:
>>> 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。
答案 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)