Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过对其他列的位进行采样来创建新列_Python_Pandas - Fatal编程技术网

Python 通过对其他列的位进行采样来创建新列

Python 通过对其他列的位进行采样来创建新列,python,pandas,Python,Pandas,考虑包含N列的数据帧,如下所示。每个条目都是一个8位整数 |---------------------|------------------|---------------------| | Column 1 | Column 2 | Column N | |---------------------|------------------|---------------------| | 4 |

考虑包含N列的数据帧,如下所示。每个条目都是一个8位整数

|---------------------|------------------|---------------------|
|      Column 1       |     Column 2     |      Column N       |
|---------------------|------------------|---------------------|
|          4          |         8        |          13         |
|---------------------|------------------|---------------------|
|          0          |         32       |          16         |
|---------------------|------------------|---------------------|
我想创建一个新的列,通过随机抽样剩余列中的每一位数据,在每一行中创建一个8位条目。因此,生成的数据帧如下所示:

|---------------------|------------------|---------------------|---------------|
|      Column 1       |     Column 2     |      Column N       |     Sampled   |
|---------------------|------------------|---------------------|---------------|
|      4 = (100)      |     8 = (1000)   |    13 = (1101)      |   5 = (0101)  |
|---------------------|------------------|---------------------|---------------|
|      0 = (0)        |    32 = (100000) |   16 = (10000)      | 48 = (110000) |
|---------------------|------------------|---------------------|---------------|
“采样”列中的第一个条目是通过在同一位置的所有可能位中选择一位创建的。例如,第一个条目中的LSB=1是从
{0(LSB从第1列开始)、0(LSB从第2列开始)、1(LSB从第N列开始)}
中选择的

这类似于,但不是每个条目都被采样,而是每个位都需要被采样


考虑到dataframe有大量的行和列,实现这一点的有效方法是什么?根据类似的问题,我假设我们需要一个
查找
+
示例
来选择条目,另一个
示例
来选择位?

与之前进行示例时的逻辑相同,但这里我在二进制和十进制之间转换两次,使用,然后将结果合并回来

df1=df.applymap(lambda x : list('{0:08b}'.format(x)))

df1=unnesting(df1,df1.columns.tolist())
s=np.random.randint(0, df1.shape[1], df1.shape[0])

yourcol=pd.Series(df1.values[np.arange(len(df1)),s]).groupby(df1.index).apply(''.join)

df['Sampled']=yourcol.map(lambda x : int(x,2))

df
Out[268]: 
   c1  c2  cn  Sampled
0   4   8  13       12
1   0  32  16       16


我有办法做到这一点,但速度很慢,你的数据有多大
def unnesting(df, explode):
    idx = df.index.repeat(df[explode[0]].str.len())
    df1 = pd.concat([
        pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
    df1.index = idx

    return df1.join(df.drop(explode, 1), how='left')