我有一个数据帧,其中一列中具有“无”
值。我想将此 None
值替换为其他列的相同组合的“类别”的最大值。
示例:熊猫数据帧
import pandas as pd
d = {'company': ['Company1', 'Company1', 'Company1', 'Company1', 'Company2', 'Company2'], 'product': ['Product A', 'Product A', 'Product F', 'Product A', 'Product F', 'Product F'], 'category': ['1', None, '3', '2', None, '5']}
df = pd.DataFrame(d)
company product category
0 Company1 Product A 1
1 Company1 Product A None
2 Company1 Product F 3
3 Company1 Product A 2
4 Company2 Product F None
5 Company2 Product F 5
我想将3中的无
值替换为唯一组合(1.2列组)此列的max()值。预期结果如下所示:
company product category
0 Company1 Product A 1
1 Company1 Product A **2**
2 Company1 Product F 3
3 Company1 Product A 2
4 Company2 Product F **5**
5 Company2 Product F 5
我尝试过的:我把1。2.列(“公司产品”)获取3的最大值()。列建立一个字典'类别'。(基于GroupBy结果到列表字典的思想)
df_dict = df[~df['category'].isna()].groupby(['company','product'])['category'].max().apply(list).to_dict()
我得到这个判决df_dict
(显示每个组合的最大类别值):
{('Company1', 'Product A'): ['2'], ('Company1', 'Product F'): ['1'], ('Company2', 'Product F'): ['5']}
现在我想用字典中每个组合的最大值替换无
df[df['category'].isna()]
ompany product category
1 Company1 Product A None
4 Company2 Product F None
问题是,我该怎么做?我尝试使用< code>set_index()
df[df['category'].isna()].set_index(['company', 'product']).index
结果
MultiIndex([('Company1', 'Product A'),
('Company2', 'Product F')],
names=['company', 'product'])
这将匹配字典中的条目并将其一起使用map()
df['category'] = df[df['category'].isna()].set_index(['company', 'product']).in
dex.map(df_dict)
...但是我得到了一个值错误
ValueError: Length of values (2) does not match length of index (6)
两个步骤,
首先,将这些 None 值转换为 NaN,
以便我们可以使用数值运算。
df['category'] = pd.to_numeric(df['category']) # add arg ,errors='coerce' if needed.
第二,让我们使用groupby transform和max仅填充NaN值。
df["category"] = df["category"].fillna(
df.groupby(["company", "product"])["category"].transform("max")
)
print(df)
company product category
0 Company1 Product A 1.0
1 Company1 Product A 2.0
2 Company1 Product F 3.0
3 Company1 Product A 2.0
4 Company2 Product F 5.0
5 Company2 Product F 5.0
问题内容: 使用Spark 1.6,我有一个Spark (命名为),其值分别为A,B,C,DS,DNS,E,F,G和H,我想使用下面的值创建一个新列(例如),我该如何映射?(因此fi’A’需要映射为’S’等。) 问题答案: 使用UDF(与版本无关)的低效率解决方案: 结果: 创建文字的效率更高( Spark > = 2.0,Spark <3.0): 结果相同: 但更有效的执行计划: 与UDF版本相
我有一个类似的例子,类似于我的另一个问题Pandas:在多个列上使用字典映射列,但是现在,我想不直接使用列“category”的max()值,而是间接使用它来填充第四列“category_name”中的None与问题1中的情况相同,但是增加了一个包含字符串的列。 此处“类别”列始终是填充的,而“类别名称”列有一些缺失值: 我想再一次用值填充无/南,我想使用的逻辑是:使用列“类别”中最大值的行的列“
映射或字典类型,一种键值对的映射关系存储结构。定义方式为mapping(_KeyType => _KeyValue)。键的类型允许除映射外的所有类型,如数组,合约,枚举,结构体。值的类型无限制。 映射可以被视作为一个哈希表,其中所有可能的键已被虚拟化的创建,被映射到一个默认值(二进制表示的零)。但在映射表中,我们并不存储键的数据,仅仅存储它的keccak256哈希值,用来查找值时使用。 因此,映射
map 翻译过来就是字典或者映射,可以把 map 看做是切片的升级版 切片是用来存储一组相同类型的数据的,map也是用来存储一组相同类型的数据的 在切片中我们可以通过索引获取对应的元素,在 map 中我们可以通过key获取对应的元素 切片的索引是系统自动生成的,从0开始递增,map 中的 key 需要我们自己指定 只要是可以做 ==、!= 判断的数据类型都可以作为 key(数值类型、字符串、数组、
问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。 解决方案 假如你有如下两个字典: a = {'x': 1, 'z': 3 } b = {'y': 2, 'z': 4 } 现在假设你必须在两个字典中执行查找操作(比如先从 a 中找,如果找不到再在 b 中找)。 一个非常简单的解决方案就是使用 collections 模块中的
问题内容: 为什么不像? 这是一个尝试使用index.map的小例子: 这引起了 给它喂lambda可以工作: 但是,重置索引和列上的映射可以按预期工作,而不会产生抱怨: 问题答案: 我没有回答您的问题…只是为您提供更好的解决方法。 使用它们