Python Pandas将多个列合并为具有条件的字典列

马克·沃特尼

基于这个问题,我问如何将多个列合并到一个字典列中,我想知道如果条件允许的话吗?

考虑以下代码段:

import pandas as pd
import numpy as np

data = [
    {"line": "a", "price": 123, "details_1": "d1", "details_2": "d2"},
    {"line": "b", "price": 234, "details_1": np.nan, "details_2": "d2"},
    {"line": "c", "price": 345, "details_1": "d1", "details_2": np.nan},
    {"line": "d", "price": 456, "details_1": np.nan, "details_2": np.nan},
    {"line": "e", "price": 567, "details_1": "d1", "details_2": "d2"},
]

df = pd.DataFrame(data)

来自E. Zeytinci的回答:

cols = ["details_1", "details_2"]
df["details"] = df[cols].to_dict(orient="records")

将“ details_1”和“ details_2”合并为一个单独的col,格式为dict,键为标签,这几乎是我所需要的。

首先:

如何添加条件,例如,我不想添加“ details_1”(如果其值为np.NaN,但我仍然需要添加“ details_2”)?

其次:

是否可以?如果可以,我该如何应用函数来格式化值,例如用“”替换所有“-”,“ _”,“”?

当前结果

  line  price details_1 details_2                                 details
0    a    123        d1        d2  {'details_1': 'd1', 'details_2': 'd2'}
1    b    234       NaN        d2   {'details_1': nan, 'details_2': 'd2'}
2    c    345        d1       NaN   {'details_1': 'd1', 'details_2': nan}
3    d    456       NaN       NaN    {'details_1': nan, 'details_2': nan}
4    e    567        d1        d2  {'details_1': 'd1', 'details_2': 'd2'}

预期成绩:

  line  price details_1 details_2                                 details
0    a    123        d1        d2  {'details_1': 'd1', 'details_2': 'd2'}
1    b    234       NaN        d2  {'details_2': 'd2'}
2    c    345        d1       NaN  {'details_1': 'd1'}
3    d    456       NaN       NaN  {}
4    e    567        d1        d2  {'details_1': 'd1', 'details_2': 'd2'}

谢谢 :)

耶斯列尔

使用嵌套字典推导来删除带有NaNs的

cols = ["details_1", "details_2"]
df["details"] = [{k:v for k, v in x.items() if pd.notna(v)} 
                      for x in df[cols].to_dict(orient="records")]
print (df)
  line  price details_1 details_2                                 details
0    a    123        d1        d2  {'details_1': 'd1', 'details_2': 'd2'}
1    b    234       NaN        d2                     {'details_2': 'd2'}
2    c    345        d1       NaN                     {'details_1': 'd1'}
3    d    456       NaN       NaN                                      {}
4    e    567        d1        d2  {'details_1': 'd1', 'details_2': 'd2'}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:根据其他两列中的值有条件地创建新列

如何在Python中无循环地有条件地设置DataFrame列值

python pandas:如果有条件则删除df列

有条件地选择多个列-Python

Python:在for循环中写入CSV,有条件地在特定列中添加值

Pandas将具有多个值的行数据合并到列的Python列表中

将具有多个键的Python字典映射到具有多个与键匹配的列的数据帧中

Python Pandas:将具有列名称的数据框列合并为一列

SQL / Python:将数据从csv转换为具有条件的不同架构的表

python pandas-有条件地合并数据

有条件的Python Pandas聚合

如何有条件地从多个Python字典中删除键。条件是(值<= time.time()-15)

python中带有条件的列的总和

通过熊猫将具有多个列索引和标题行的Excel放入Python字典

有条件地在python中添加一个时间戳列

Python通过使用python在2个DataFrame中具有条件(Ranges)来合并键

有条件地替换NaNs Python Pandas

Python:如何从python的数据框中的列中有条件地删除字母?

通过将字典的值与数据框python的列匹配来有条件地进行选择

Python:有条件地在循环中绘制数据框中许多列的数据

有条件地将字符串转换为Python中的字典

Python Pandas-将多个列合并为一个交错列

如何根据python字典的键和值有条件地将数据添加到Excel文件中的列,同时保持其他列一致

Python pandas - 将具有多个日期索引的 csv 合并为单个日期索引

在 Python 中过滤具有条件的对象列表

Python将多个带有null的日期列合并为1列Pandas

如何使用 Python 和 Pandas 将具有相似和不同列的多个 CSV 文件合并为 1?

Python Dataframe 有条件地向现有列添加值

在 Python 中有条件地填充一个新列