gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:10 24 4
gpt4 key购买 nike

我有一个如下所示的 pandas 数据框:

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

最佳答案

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 转换为 bool 值,然后应用 lambda 函数连接索引中 bool 值为 true 的所有值。在 Pandas 系列中,如果 x 是 bool 值,则 x[x] 将返回那些正索引和值。

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

输出:

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

并且您可以执行一些内务重命名列、reset_index 等...

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

关于python - 如何从另一个数据帧中选择非空行并随机获取其索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44139026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com