【发布时间】:2021-04-07 09:50:43
【问题描述】:
我有一个如下所示的 pandas 数据框 df
id Surname DOB X1 Y1 TRACEID
0 1 Garud 2019-01-01T12:10 xxx yyyy {}
1 2 Garud 2019-01-01T12:10 xxx yyyy {}
2 3 Garud 2019-01-02T12:10 xxx yyyy {}
3 4 Kadam 2019-01-06T12:10 xxx yyyy {}
4 5 Kadam 2019-01-03T12:10 xxx yyyy {}
5 6 Kadam 2019-01-04T12:10 xxx yyyy {}
TRACEID 列包含空字典: 我想根据 X1 和 Y1 列填写这些字典。
- 如果 X1 和 Y1 列值都不为空,则对应的 TRACEID 应为 {'X1':'xxx','Y1':'yyyy'}
- 如果 Y1 列值为 null,则 TRACEID 将为 {'X1':'xxxx'}
- 如果 X1 列值为 null,则 TRACEID 将为 {'Y1':'yyyy'}
我尝试了以下
list1 = ['X1','Y1']
for col in list1:
df['TRACEID'] = np.where(df[col]!='',df['TRACEID'].update({col:df[col]}),df['TRACEID'])
但是,这是在 TRACEID 列中分配所有 None 值。
我知道,我可以使用 df.iterrows() 来完成,但不想这样做,因为它需要大量时间来迭代。 df 有约 10 万条记录。所以必须使用np.select 或np.where 来实现。
【问题讨论】:
-
当同一行的两列都为空时会发生什么?
-
apply()超级简单,你想要这个答案吗? -
@Umar.H - 在我的情况下这是不可能的。任何一列都将始终具有价值。
-
@Ynjxsjmh - 是的,会有所帮助。
-
n'p.where不是迭代器。这 3 个参数在传递给它之前会被完整评估。分别查看它们并告诉我们这些值是否有意义。 dicts 是单独的对象(或者可能是同一个对象),必须单独更新。
标签: python-3.x pandas numpy