感谢您提供任何帮助。
我有两个数据框:
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/