大熊猫列

时间:2017-02-18 15:56:57

标签: python pandas

我想在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.

我可以找到特定列的模式值。如果我将每个位拆分成一个新列并找到模式值。我可以稍后通过连接获得预期的输出。但是,当数据具有更多的二进制字符串列时,我不确定这种方法是否仍然是一种好方法。我正在寻找更优雅的方法来做到这一点。我可以提出你的建议吗?

1 个答案:

答案 0 :(得分:2)

我认为您可以使用applySerieslistdigits转换为列,然后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

上一个选择行,创建listjoin

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
相关问题