首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在熊猫数据栏中的每一栏中取得一致意见

在熊猫数据栏中的每一栏中取得一致意见
EN

Stack Overflow用户
提问于 2021-12-23 17:41:57
回答 1查看 37关注 0票数 0

我有一个数据文件,例如:

代码语言:javascript
运行
复制
Groups COL1 COL2 COL3 COL4 
G1     A    NaN  I    J
G1     A    NaN  I    J
G1     NaN  NaN  Z    J
G1     B    K    Z    J
G2     NaN  NaN  NaN  NaN
G2     NaN  NaN  K    NaN
G3     NaN  B    C    D
G3     NaN  C    C    D
G3     NaN  B    C    E

我想:

1-首先,对于每个GroupColumn,都要获得一个协商一致的列,例如:

代码语言:javascript
运行
复制
Groups COL1 COL2 COL3 COL4 cc_COL1 cc_COL2 cc_COL3 cc_COL4
G1     A    NaN  I    J    A       K       I       J
G1     A    NaN  I    J    A       K       I       J
G1     NaN  NaN  Z    J    A       K       Z       J
G1     B    K    Z    J    A       K       Z       J
G2     NaN  NaN  NaN  NaN  NaN     NaN     K       NaN
G2     NaN  NaN  K    NaN  NaN     NaN     K       NaN
G3     NaN  B    C    D    NaN     B       C       D
G3     NaN  C    C    D    NaN     B       C       D
G3     NaN  B    C    E    NaN     B       C       D

Groupcolumn中的两个值具有相同的数字时,我取第一个。

第二步,为每个组获得一个representaitve_column

其中,该列按以下列的顺序接受non-NaN值:

代码语言:javascript
运行
复制
cc_COL1,cc_COL2,cc_COL3 and cc_COL4

因此,例如,如果cc_COL1中有NaN,则representative_column接受cc_COL2的值,但是如果cc_COL2NaN,中也使用cc_COL3等值,直到cc_COL4为止。如果都是NaN,那我就把NaN

然后,在这个例子中,我应该得到以下输出:

代码语言:javascript
运行
复制
Groups COL1 COL2 COL3 COL4 cc_COL1 cc_COL2 cc_COL3 cc_COL4 representative_column
G1     A    NaN  I    J    A       K       I       J       A
G1     A    NaN  I    J    A       K       I       J       A
G1     NaN  NaN  Z    J    A       K       Z       J       A
G1     B    K    Z    J    A       K       Z       J       A
G2     NaN  NaN  NaN  NaN  NaN     NaN     K       NaN     K
G2     NaN  NaN  K    NaN  NaN     NaN     K       NaN     K
G3     NaN  B    C    D    NaN     B       C       D       B
G3     NaN  C    C    D    NaN     B       C       D       B
G3     NaN  B    C    E    NaN     B       C       D       B

以下是dict格式的数据格式(如果可以帮助的话):

代码语言:javascript
运行
复制
{'Groups': {0: 'G1', 1: 'G1', 2: 'G1', 3: 'G1', 4: 'G2', 5: 'G2'}, 'COL1': {0: 'A', 1: 'A', 2: nan, 3: 'B', 4: nan, 5: nan}, 'COL2': {0: nan, 1: nan, 2: nan, 3: 'K', 4: nan, 5: nan}, 'COL3': {0: 'I', 1: 'I', 2: 'Z', 3: 'Z', 4: nan, 5: 'K'}, 'COL4 ': {0: 'J', 1: 'J', 2: 'J', 3: 'J', 4: nan, 5: nan}}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-23 17:48:46

试试这个:

代码语言:javascript
运行
复制
tmp_df = df.apply(lambda col: col.groupby(df['Groups']).transform(lambda x: x.mode()[0] if len(x.mode())>0 else np.nan)).drop('Groups', axis=1)
df['representative_column'] = tmp_df.bfill(axis=1).iloc[:, 0]

输出:

代码语言:javascript
运行
复制
>>> df
  Groups COL1 COL2 COL3 COL4 cc_COL1 cc_COL2 cc_COL3 cc_COL4 representative_column
0     G1    A  NaN    I    J       A       K       I       J                     A
1     G1    A  NaN    I    J       A       K       I       J                     A
2     G1  NaN  NaN    Z    J       A       K       I       J                     A
3     G1    B    K    Z    J       A       K       I       J                     A
4     G2  NaN  NaN  NaN  NaN     NaN     NaN       K     NaN                     K
5     G2  NaN  NaN    K  NaN     NaN     NaN       K     NaN                     K
6     G3  NaN    B    C    D     NaN       B       C       D                     B
7     G3  NaN    C    C    D     NaN       B       C       D                     B
8     G3  NaN    B    C    E     NaN       B       C       D                     B
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70465644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档