Python 获取每一行的统计信息,并将其放入新列中。熊猫

Python 获取每一行的统计信息,并将其放入新列中。熊猫,python,pandas,dataframe,Python,Pandas,Dataframe,所以我有一个带有一些值的数据帧。这是我的数据帧: |in|x|y|z| +--+-+-+-+ | 1|a|a|b| | 2|a|b|b| | 3|a|b|c| | 4|b|b|c| 我想得到每行的唯一值的数量,以及不等于x列中的值的数量。结果应该如下所示: |in | x | y | z | count of not x |unique| +---+---+---+---+---+---+ | 1 | a | a | b | 1 | 2 | | 2 | a | b | b | 2 | 2 |

所以我有一个带有一些值的数据帧。这是我的数据帧:

|in|x|y|z|
+--+-+-+-+
| 1|a|a|b|
| 2|a|b|b|
| 3|a|b|c|
| 4|b|b|c|
我想得到每行的唯一值的数量,以及不等于x列中的值的数量。结果应该如下所示:

|in | x | y | z | count of not x |unique|
+---+---+---+---+---+---+
| 1 | a | a | b | 1 | 2 |
| 2 | a | b | b | 2 | 2 |
| 3 | a | b | c | 2 | 3 |
| 4 | b | b |nan| 0 | 1 |

我可以在这里做出一些肮脏的决定。但一定有一些优雅的方式来做到这一点。我的思想正在改变重复的内容(这在系列中不起作用);转换为数组和.unique();我想回避的df.iterrows();和。在每行上应用。

以下是使用应用的解决方案

df['count of not x'] = df.apply(lambda x: (x[['y','z']] != x['x']).sum(), axis=1)
df['unique'] = df.apply(lambda x: x[['x','y','z']].nunique(), axis=1)
获取非x计数的非应用解决方案:

df['count of not x'] = (~df[['y','z']].isin(df['x'])).sum(1)
我想不出有什么特别好的。这将使用apply,但速度可能更快,具体取决于数据的形状

df['unique'] = df[['x','y','z']].T.apply(lambda x: x.nunique())

下面是使用apply的解决方案

df['count of not x'] = df.apply(lambda x: (x[['y','z']] != x['x']).sum(), axis=1)
df['unique'] = df.apply(lambda x: x[['x','y','z']].nunique(), axis=1)
获取非x计数的非应用解决方案:

df['count of not x'] = (~df[['y','z']].isin(df['x'])).sum(1)
我想不出有什么特别好的。这将使用apply,但速度可能更快,具体取决于数据的形状

df['unique'] = df[['x','y','z']].T.apply(lambda x: x.nunique())

下面是使用apply的解决方案

df['count of not x'] = df.apply(lambda x: (x[['y','z']] != x['x']).sum(), axis=1)
df['unique'] = df.apply(lambda x: x[['x','y','z']].nunique(), axis=1)
获取非x计数的非应用解决方案:

df['count of not x'] = (~df[['y','z']].isin(df['x'])).sum(1)
我想不出有什么特别好的。这将使用apply,但速度可能更快,具体取决于数据的形状

df['unique'] = df[['x','y','z']].T.apply(lambda x: x.nunique())

下面是使用apply的解决方案

df['count of not x'] = df.apply(lambda x: (x[['y','z']] != x['x']).sum(), axis=1)
df['unique'] = df.apply(lambda x: x[['x','y','z']].nunique(), axis=1)
获取非x计数的非应用解决方案:

df['count of not x'] = (~df[['y','z']].isin(df['x'])).sum(1)
我想不出有什么特别好的。这将使用apply,但速度可能更快,具体取决于数据的形状

df['unique'] = df[['x','y','z']].T.apply(lambda x: x.nunique())

列的数据类型是什么?列的数据类型是什么?列的数据类型是什么?列的数据类型是什么?lambda x:pandas.unique(x).shape[0]如何?这样行吗?那lambda x:pandas.unique(x.shape[0]呢?这样行吗?那lambda x:pandas.unique(x.shape[0]呢?这样行吗?那lambda x:pandas.unique(x.shape[0]呢?这样行吗?