繁体   English   中英

如何将 dataframe 中的列设置为从另一列获得的值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM