python 在Dataframe中插入计算列(包含奇怪列)

bcs8qyzn  于 2023-08-02  发布在  Python
关注(0)|答案(3)|浏览(127)

我的问题是:我有一个这样的 Dataframe
| x轴| x |
| --| ------------ |
| [{key1:value1}]| [{key1: value1}] |
| [{key2:value2]| [{key2: value2] |
我想在列表中添加一个包含dict中的值的列。
| x轴|y| y |
| --|--| ------------ |
| [{key1:value1}]|价值1| value1 |
| [{key1:value2]|价值2| value2 |
我试过这个:

df= df_list['mydf'].assign(y = (df_list['mydf']['x'])[0]['key1'] )

字符串
注意:我有一个dataframe的列表,df_list,因为它们将与concat合并
但是[0]似乎只得到第一行的值:

[{key1: value1}]


你可以试试这个dummy df:

df_test = {'a': pd.DataFrame({'item': ['blabla', 'blable'], 'x': [[{'a':1}],[{'a':2}] ]}), 'b': pd.DataFrame({'item': ['bl', 'le'], 'x': [[{'a':3}],[{'a':4}] ]}) }

df_test['a'].assign(y = df_test['a']['item']+"0")


产出:
| 项目|x轴|y| y |
| --|--|--| ------------ |
| 布拉布拉|['a':1}]| blabla0| blabla0 |
| 责备|['a':2}]| blable0| blable0 |

df_test['a'].assign(y = df_test['a']['x'][0])


输出量

Length of values (1) does not match length of index (2)


当期望值应该是dict时。我真的不明白pd想干什么
谢谢你,谢谢

tvz2xvvm

tvz2xvvm1#

你试过使用lambda函数吗?索引[“x”][0]将不起作用,因为pandas只会将[0]索引作为该列的第一个元素。lambda函数将在输入x上返回x[0][“a”],这是 Dataframe 中的奇异元素。这一工作原理:

import pandas as pd
df = pd.DataFrame({'item': ['blabla', 'blable'], 'x': [[{'a':1}],[{'a':2}] ]})
df["y"] = df["x"].apply(lambda x: x[0]["a"])
print(df)

个字符

xfb7svmp

xfb7svmp2#

使用.explode()提取列表中的元素。

df =  pd.DataFrame({'item': ['blabla', 'blable'], 'x': [[{'a':1}],[{'a':2}] ]})
df['y'] = df['x'].explode().str['a']
print(df)

字符串
产生

item           x  y
0  blabla  [{'a': 1}]  1
1  blable  [{'a': 2}]  2

owfi6suc

owfi6suc3#

可以使用df.apply()将lambda函数应用于列。
您的示例数据框:

df = {'a': pd.DataFrame({'item': ['blabla', 'blable'], 'x': [[{'a':1}],[{'a':2}] ]}), 'b': pd.DataFrame({'item': ['bl', 'le'], 'x': [[{'a':3}],[{'a':4}] ]}) }
df['a']

字符串
产出:
| x轴| x |
| --| ------------ |
| ['a':1}]| [{'a': 1}] |
| ['a':2}]| [{'a': 2}] |
使用.apply()和lambda:

df['a']['y'] = df['a'].x.apply(lambda x: x[0]['a']) # get the value for key 'a' in first dict in list
df['a']


产出:
| x轴|y| y |
| --|--| ------------ |
| ['a':1}]| 1| 1 |
| ['a':2}]|二个| 2 |

相关问题