我想在pandas列的二进制字符串中找到每个数字的模式值。假设我有以下数据
df = pd.DataFrame({'categories':['A','B','C'],'values':['001','110','111']})
所以我的数据看起来像这样
categories values
A 001
B 110
C 111
如果我们考虑列"值"在A,B和C的第一个数字(0,1,1),模式值为1.如果我们对其他数字执行相同操作,我的预期输出应为111.
我可以找到特定列的模式值。如果我将每个位拆分成一个新列并找到模式值。我可以稍后通过连接获得预期的输出。但是,当数据具有更多的二进制字符串列时,我不确定这种方法是否仍然是一种好方法。我正在寻找更优雅的方法来做到这一点。我可以提出你的建议吗?
答案 0 :(得分:2)
我认为您可以使用apply
与Series
和list
将digits
转换为列,然后mode
:
print (df['values'].apply(lambda x: pd.Series(list(x))))
0 1 2
0 0 0 1
1 1 1 0
2 1 1 1
df1 = df['values'].apply(lambda x: pd.Series(list(x))).mode()
print (df1)
0 1 2
0 1 1 1
上一个选择行,创建list
和join
:
print (''.join(df1.iloc[0].tolist()))
111
list comprehension
的另一种可能解决方案:
df = pd.DataFrame([list(x) for x in df['values']])
print (df)
0 1 2
0 0 0 1
1 1 1 0
2 1 1 1
如果输出为DataFrame
,则可以使用apply
join
:
df = pd.DataFrame({'categories':['A','B','C', 'D'],'values':['001','110','111', '000']})
print (df)
categories values
0 A 001
1 B 110
2 C 111
3 D 000
print (pd.DataFrame([list(x) for x in df['values']]).mode())
0 1 2
0 0 0 0
1 1 1 1
df1 = pd.DataFrame([list(x) for x in df['values']]).mode().apply(''.join, axis=1)
print (df1)
0 000
1 111
dtype: object