是否可以对数据帧中2行(或多行)的值进行唯一计数?我能够对个人的前6列中的df['count'] = df.iloc[:, 0:6].nunique(axis=1)列进行唯一计数.然而,我想不出(或找到)如何获得两行(或多行)中6列的唯一计数.

原始df: 每行有3个唯一值:7、4、2和8、5、6

╔═════╦══════╦══════╦══════╦═════╦═════════╦════════╦═══════╗
║ hf0 ║ hf1  ║ hf2  ║ hf3  ║ hf4 ║ hf5     ║ sample ║ count ║
╠═════╬══════╬══════╬══════╬═════╬═════════╬════════╬═══════╣
║   7 ║    4 ║    2 ║    2 ║   7 ║       2 ║ 7yr    ║     3 ║
║   8 ║    5 ║    5 ║    6 ║   5 ║       6 ║ 7yr    ║     3 ║
╚═════╩══════╩══════╩══════╩═════╩═════════╩════════╩═══════╝

Dftry 获得: 这两行都有6个唯一值:7、4、2、8、5、6

╔═════╦══════╦══════╦══════╦═════╦═════════╦════════╦════════╦════════════╗
║ hf0 ║ hf1  ║ hf2  ║ hf3  ║ hf4 ║ hf5     ║ sample ║ count  ║ count2rows ║
╠═════╬══════╬══════╬══════╬═════╬═════════╬════════╬════════╬════════════╣
║   7 ║    4 ║    2 ║    2 ║   7 ║       2 ║ 7yr    ║      3 ║          6 ║
║   8 ║    5 ║    5 ║    6 ║   5 ║       6 ║ 7yr    ║      3 ║          6 ║
╚═════╩══════╩══════╩══════╩═════╩═════════╩════════╩════════╩════════════╝

示例df代码:

import pandas as pd
import numpy as np
data = {'hf0':[7,8],'hf1':[4,5], 'hf2':[2,5],'hf3':[2,6],'hf4':[7,5],'hf5':[2,6],'sample':['7yr','7yr']}
df = pd.DataFrame(data)

df['count'] = df.iloc[:, 0:6].nunique(axis=1)
df

提前谢谢你

推荐答案

df
###
   hf0  hf1  hf2  hf3  hf4  hf5 sample
0    7    4    2    2    7    2    7yr
1    8    5    5    6    5    6    7yr
2    9    6    8   10    7   10    7yr
3   10    7   11   14    5   14    7yr
4   11    8   14   18    7   18    7yr




滚动窗口rolling=2

rolling = 2

ar = df.loc[:,'hf0':'hf5'].values
length = ar.shape[1]
head_arrs = np.zeros((rolling-1, rolling*length))
cubic = np.lib.stride_tricks.sliding_window_view(ar, (rolling,length)).astype(float)
plane = cubic.reshape(-1,rolling*length)

for i in range(rolling-1,0,-1):
        head_arr_l = plane[0,:i*length]
        head_arr_l = np.pad(head_arr_l.astype(float), (0,length*(rolling-i)), 'constant', constant_values=np.nan)
        head_arr_l = np.roll(head_arr_l, length*(rolling-i))
        head_arrs[i-1,:] = head_arr_l

plane = np.insert(plane, 0, head_arrs, axis=0)
df['rolling_nunique'] = pd.DataFrame(plane).nunique(axis=1)
df
###
   hf0  hf1  hf2  hf3  hf4  hf5 sample  rolling_nunique
0    7    4    2    2    7    2    7yr                3
1    8    5    5    6    5    6    7yr                6
2    9    6    8   10    7   10    7yr                6
3   10    7   11   14    5   14    7yr                8
4   11    8   14   18    7   18    7yr                7



滚动窗口rolling=3

   hf0  hf1  hf2  hf3  hf4  hf5 sample  rolling_nunique
0    7    4    2    2    7    2    7yr                3
1    8    5    5    6    5    6    7yr                6
2    9    6    8   10    7   10    7yr                8
3   10    7   11   14    5   14    7yr                8
4   11    8   14   18    7   18    7yr                9



If the rolling window covers whole rows of df,
in this case, df.shape[0] = 5,
Rolling window rolling=5

   hf0  hf1  hf2  hf3  hf4  hf5 sample  rolling_nunique
0    7    4    2    2    7    2    7yr                3
1    8    5    5    6    5    6    7yr                6
2    9    6    8   10    7   10    7yr                8
3   10    7   11   14    5   14    7yr               10
4   11    8   14   18    7   18    7yr               11

Python相关问答推荐

如何删除索引过go 的lexsort深度可能会影响性能?' &>

如何让剧作家等待Python中出现特定cookie(然后返回它)?

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

如何在polars(pythonapi)中解构嵌套 struct ?

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

在极性中创建条件累积和

如何合并两个列表,并获得每个索引值最高的列表名称?

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

下三角形掩码与seaborn clustermap bug

寻找Regex模式返回与我当前函数类似的结果

python sklearn ValueError:使用序列设置数组元素

用SymPy在Python中求解指数函数

Gekko中基于时间的间隔约束

如何按row_id/row_number过滤数据帧

如何使用正则表达式修改toml文件中指定字段中的参数值

如何删除重复的文字翻拍?

用fft计算指数复和代替求和来模拟衍射?

Groupby并在组内比较单独行上的两个时间戳

Django-修改后的管理表单返回对象而不是文本

如何将参数名作为参数传入到函数中?