gpt4 book ai didi

python - 用新的 Dataframe 替换一行

转载 作者:行者123 更新时间:2023-11-28 17:01:27 27 4
gpt4 key购买 nike

我正在寻找一种更优雅的方法来从字典的值中替换另一个数据框中的数据框。

这是我必须使用的数据类型的示例

d = {1 : {'name' : 'bob','age' : 22,'Data' : {}},
4 : {'name' : 'sam','age' : 30,'Data' : {}},
2 : {'name' : 'tom','age' : 20,'Data' : [{'Mail':'B','MailValue': 89},
{'Mail':'C','MailValue' : 100}]},
3 : {'name' : 'mat','age' : 19,'Data' : [{'Mail':'D','MailValue': 71}]}} '
df = pd.DataFrame(d).T
df
Data age name
1 {} 22 bob
4 {} 30 sam
2 [{'Mail': 'B', 'MailValue': 89}, {'Mail': 'C',... 20 tom
3 [{'Mail': 'D', 'MailValue': 71}] 19 mat

这是我的实际解决方案,用于在最终数据帧 df2 中附加数据单元格的值并复制名称和年龄列

df2 = pd.DataFrame()
for idx, row in df[:].iterrows():
dfx = pd.DataFrame(row.Data)
dfx['idx'] = idx
df2 = df2.append(dfx)

df2.set_index('idx', inplace= True)
df2[df.columns] = df
df2 = df2.append(df.drop(df2.index.unique())).drop(columns = ['Data'])

print(df2)
Mail MailValue age name
2 B 89.0 20 tom
2 C 100.0 20 tom
3 D 71.0 19 mat
1 NaN NaN 22 bob
4 NaN NaN 30 sam

最佳答案

一种方法是将 pd.concat 与可迭代的拆分数据帧一起使用,注意为空字典构建单行数据帧:

splits = [pd.DataFrame(x if x else [{}]) for x in df.pop('Data')]

lens = list(map(len, splits))

df = pd.DataFrame({'age': np.repeat(df['age'].values, lens),
'name': np.repeat(df['name'].values, lens)})\
.join(pd.concat(splits, ignore_index=True))


print(df)
# age name Mail MailValue
# 0 22 bob NaN NaN
# 1 20 tom B 89.0
# 2 20 tom C 100.0
# 3 19 mat D 71.0
# 4 30 sam NaN NaN

关于python - 用新的 Dataframe 替换一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54183019/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com