![](/img/trans.png)
[英]How to create a new `DataFrame` with values obtained from another?
[英]How to set the columns in dataframe to the values obtained from another column?
所以我有一个 DataFrame 有两列, Size
是 object 的大小, Description
是项目描述。 Size
列中的一些单元格已经被填满,所以我想专注于像这样的空单元格:
|Size|Description |
-----+-------------|
| |Red-Round-L |
| |Blue-Square-M|
我想使用Description
列中的值填充Size
列中的空单元格,使其看起来像这样:
|Size |Description |
------+-------------|
| L |Red-Round-L |
| M |Blue-Square-M|
我尝试使用这个:
df.loc[df['Size'] == '', 'Size'] = df['Description'].str.split('-')[2] #Because the item size is 3rd element
但它抛出了一个错误:
ValueError: Must have equal len keys and value when setting with an iterable
如何从列Description
的每个单元格中获取项目大小并将其填充到Size
的单元格中?
您需要使用相同的 boolean 掩码:
df.loc[df['Size'] == '', 'Size'] = df.loc[df['Size'] == '','Description'].str.split('-')[2]
因为这是每边长度匹配的唯一方法。 您尝试做的是选择右侧的所有列,而仅选择左侧df.Size == ''
列。 只有当所有行都符合这个标准时,它才会起作用。
您必须使用参数expand
( 在此处查看更多信息):
df.loc[df["Size"] == '', "Size"] = df["Description"].str.split('-', expand = True).iloc[:,[-1]].values.reshape(-1)
不同之处在于,不使用expand
你会得到:
0 [Red, Round, L]
1 [Blue, Square, M]
因此,您无法访问每个“第三位置”。 现在,如果expand = True
你得到:
0 1 2
0 Red Round L
1 Blue Square M
因此,您可以访问最后一列( .iloc[:,[-1]]
)。 最后一件事是将获得的数组重塑为一维数组( .reshape(-1)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.