Python 转换整个数据帧';将s值转换为唯一整数以进行fisher';s检验
我想将我的字符串值更改为整个数据帧的唯一整数ID,这是我想做的简化版本。真正的一个有20+列和100000+行。我需要将其转换为每行执行fisher测试,这需要区分唯一整数,以查看列组之间的差异 Xcol1 col2 col3 10/01/10/0 20/20/01/1 31/20/21/1 40/0/0/0 到 Xcol1 col2 col3 112 1 23 1 2 34 3 2 41 尝试进行因式分解,但无法解决如何对这样的整个数据帧执行此操作,只能对具有以下代码的列执行此操作:df=df.apply(lambda x:pd.factorize(x)[0])Python 转换整个数据帧';将s值转换为唯一整数以进行fisher';s检验,python,pandas,Python,Pandas,我想将我的字符串值更改为整个数据帧的唯一整数ID,这是我想做的简化版本。真正的一个有20+列和100000+行。我需要将其转换为每行执行fisher测试,这需要区分唯一整数,以查看列组之间的差异 Xcol1 col2 col3 10/01/10/0 20/20/01/1 31/20/21/1 40/0/0/0 到 Xcol1 col2 col3 112 1 23 1 2 34 3 2 41 尝试进行因式分解,但无法解决如何对这样的整个数据帧执行此操作,只能对具有以下代码的列执行此操作:df=df
同样的工作是只按每行解析的数据来处理每行数据。使用
df.rank
和method='dense'
。每个唯一的字符串将被分配一个唯一的编号/等级
df_final = df.set_index('X').rank(method='dense').astype(int)
Out[244]:
col1 col2 col3
X
1 1 3 1
2 2 1 2
3 3 2 2
4 1 1 1
试试这个:
df = pd.DataFrame([['0/0', '1/1', '0/0'], ['0/2', '0/1', '1/1'], ['1/2', '0/2', '1/1'], ['0/0', '0/0', '0/0']])
d = {n:m for m, n in enumerate(list(set([j for i in df.values.tolist() for j in i])))}
df_new = df.replace(d)
输入:
0 1 2
0 0/0 1/1 0/0
1 0/2 0/1 1/1
2 1/2 0/2 1/1
3 0/0 0/0 0/0
输出:
0 1 2
0 2 4 2
1 1 3 4
2 0 1 4
3 2 2 2
您可以使用apply函数这样做
df = pd.DataFrame([['0/0', '1/1', '0/0'], ['0/2', '0/0', '1/1'], ['1/2', '0/2', '1/1'], ['0/0', '0/0', '0/0']], columns=('col1', 'col2', 'col3'))
df2 = df.apply(lambda s: [sum(map(int,x.split("/"))) for x in s])
df2[df2==0] = 1
df2
结果
col1 col2 col3
0 1 2 1
1 2 1 2
2 3 2 2
3 1 1 1
所以对整个数据帧使用
applymap
?