如何从另一个数据帧中选择非空行并随机获取其索引

2024-10-04 01:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框如下:

name of dataframe : ZA
             AB        AC        AF
    A1  1.764052  0.400157  0.978738
    B1       NaN  0.400157  0.400157

我想稍后添加每个非空列中随机行的索引。你知道吗

代码如下:

list = ['AB','AC','AF']

info_s =   pd.DataFrame(columns=['X'],index = list)

for app in list:
    if app in ZA.columns:
        ele = ZA.dropna(how='all') #didn't work  
        ele1=ele.loc[:,app].take(np.random.permutation(len(ele.index))[:1]) 
        ind = ele1.index
        info_s.loc[app, 'X'] = ind
    else:
        info_s.loc[app, 'X'] = None

输出:

Index        X
AB          Only A1
AC          A1 or B1
AF          A1 or B1

Tags: columnsininfoappindexaba1loc
1条回答
网友
1楼 · 发布于 2024-10-04 01:25:57

IIUC编辑:

ZA.notnull().apply(lambda x:np.random.choice(x[x].index)).reset_index().rename(columns={0:'X'})

输出:

  index   X
0    AB  A1
1    AC  B1
2    AF  A1

您不需要列表或for循环,这一行可以:

解释

使用notnull转换为布尔值,然后应用lambda函数连接布尔值为真的索引的所有值。在Pandas系列中,如果x是布尔值,那么x[x]将返回那些正索引和值。你知道吗

ZA.notnull().apply(lambda x: ' or '.join(x[x].index))

输出:

AB          A1
AC    A1 or B1
AF    A1 or B1
dtype: object

你可以做一些家务重命名列,重置索引,等等。。。你知道吗

ZA.notnull().apply(lambda x: ' or '.join(x[x].index)).reset_index().rename(columns={0:'X'})

输出:

  index         X
0    AB        A1
1    AC  A1 or B1
2    AF  A1 or B1

相关问题 更多 >