我有以下数据框:

data = {
    's1': [[1, 2], [None], [2, 3]],
    's2': [[4, 5], [6, 7], [3, 2]]
}

output:

        s1     s2
0   [1, 2]  [4, 5]
1      NaN  [6, 7]
2   [2, 3]  [3, 2]

我需要获取这些列s1s2的每个元素的唯一计数,并将这些计数作为行添加,如下所示: 编辑:还需要忽略计数中的无/空值.

expected output:
  step      count
0    1      4 -> since [1,2,3,NaN] <<- EDIT this should only be 3 ignoring NaN
1    2     6  -> since[1,2,3,4,5,6]

我的所作所为有点肮脏:

s1_unique = df['s1'].explode().unique()
s2_unique = df['s2'].explode().unique()
new_df = pd.DataFrame()
new_df['step] = [1,2]
new_df['count'] = [len(s1_unique), len(s2_unique)]
new_df['name'] = 'Others'

有没有一种"整洁"的数据帧方法来处理这个问题?

推荐答案

可以通过对每一列应用设置计数+使用NumPy拼接进行展平来完成:

data = {
    's1': [[1, 2], [None], [2, 3]],
    's2': [[4, 5], [6, 7], [3, 2]]
}

df = pd.DataFrame(data)

pd.DataFrame( {'step': range(1, 1+df.shape[1]),
               'count': df.apply(lambda x : len(set( np.concatenate(x.values))), axis=0)}
            )

#   step    count
# s1    1   4
# s2    2   6

编辑:

不计None个值:

pd.DataFrame( {'step': range(1, 1+df.shape[1]),
               'count': df.apply(lambda x : len(set( np.concatenate(x.values)).difference({None})), axis=0)}
            )

pd.DataFrame( {'step': range(1, 1+df.shape[1]),
               'count': df.apply(lambda x : len(set( value f或 value in np.concatenate(x.values) if value is not None)), axis=0)}
            )

Python相关问答推荐

如何循环循环的每个元素并过滤掉Python rame中的条件

try 使用tensorFlow.keras.models时optree Import错误

Python中的锁定类和线程以实现dict移动

当pip为学校作业(job)安装sourcefender时,我没有收到匹配的分发错误.我已经try 过Python 3.8.10和3.10.11

如何使用PyTest根据self 模拟具有副作用的属性

请从Python访问kivy子部件的功能需要帮助

symy.分段使用numpy数组

覆盖Django rest响应,仅返回PK

从DataFrame.apply创建DataFrame

如何根据另一列值用字典中的值替换列值

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

如何检测背景有噪的图像中的正方形

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

图像 pyramid .难以创建所需的合成图像

Mistral模型为不同的输入文本生成相同的嵌入

通过pandas向每个非空单元格添加子字符串

实现自定义QWidgets作为QTimeEdit的弹出窗口

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题

Numpyro AR(1)均值切换模型抽样不一致性