感谢您提供任何帮助。

我有两个数据框:

df1
+-----+----------+
| key | category |
+-----+----------+
|   1 | B        |
|   1 | A        |
|   1 | A        |
|   2 | C        |
|   2 | B        |
|   3 | C        |
|   3 | B        |
|   3 | C        |
|   4 | B        |
|   4 | B        |
+-----+----------+

df2
+-----+----------+
| key | is_thing |
+-----+----------+
|   1 | yes      |
|   2 | yes      |
|   3 | yes      |
|   4 | no       |
+-----+----------+


我需要计算每个类别每个键出现在df1中的次数,并将每个密钥总和最高的类别映射到df2,这样没有多数的类别将导致NaN,并且期望的输出是:

+-----+----------+----------+
| key | is_thing | category |
+-----+----------+----------+
|   1 | yes      | A        |
|   2 | yes      | NaN|
|   3 | yes      | C        |
|   4 | no       | B        |
+-----+----------+----------+


如何使用Python和熊猫做到这一点?以下是可复制程序:

import pandas as pd

data1 = {'key': [1, 1, 1, 2, 2, 3, 3, 3, 4, 4],
         'category': ['A', 'A', 'B', 'B', 'C', 'C', 'B', 'C', 'B', 'B']}
data2 = {'key': [1, 2, 3, 4],
         'is_thing': ['yes', 'yes', 'yes', 'no']}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

data_desired = {'key': [1, 2, 3, 4],
                'is_thing': ['yes', 'yes', 'yes', 'no'],
                'cotegory': ['A', 'null', 'C', 'B']}

df_desired = pd.DataFrame(data_desired)


非常感谢您提供的任何帮助。谢谢。

最佳答案

用:

df2['category']=df2['key'].map(

  df1.groupby('key')
     .category
     .value_counts()
     .groupby(level=0)
     .filter(lambda x: x.nunique() == len(x))
     .unstack()
     .idxmax(1)
)
print(df2)

   key is_thing category
0    1      yes        A
1    2      yes      NaN
2    3      yes        C
3    4       no        B

关于python - 如何计算一个数据框中分类出现的数量并映射到另一个数据框中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59361027/

10-09 20:19