如何在python中向现有列表添加或更新信息

2024-09-29 18:46:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我所要做的就是用相应的出生年份填充一个独特客户的列表。大多数人都想把它写回我的df来填补那些空白。约翰和迈克的名字在名单上都出现了两次。约翰第一次购买物品时提供了出生年份,但第二次没有提供。而迈克却做了与约翰相反的事。下面是我关于客户交易的数据框架示例

df = pd.DataFrame({ 'Date': [2020-06-01, 2020-06-01, 2020-06-01, 2020-06-19, 2020-06-20, 2020-06-22,
                            2020-06-24, 2020-06-25],
                    'cst_names': ['John', 'Mike', 'Ndara', 'John', 'Kasiku', 'Mike', 'Alter', 'Lee'],
                    'birth_year': [1979, '', 1977, '', 1980,  1986, 1986, 2000],
                    'Price': [2000, 300, 375, 800, 3000, 199, 250, 600] })

这就是我想要实现的目标:

unique_lst = {'John': 1979,  'Mike': 1986, 'Ndara': 1977, 'Kasiku': 1980, 'Alter': 1986, 'Lee':2000 }

一旦我有了这个信息,我想把它写回我的df并更新丢失的空格

我试过使用zip和set,但似乎没有正确使用

a_dict = dict(zip(df.cst_names, df.birth_year))

我尝试了一个for循环和tuple,但仍然无法理解


Tags: df客户nameszipjohnyeardictmike
3条回答

我做了下面的事情,效果很好,但我觉得它很脏。在第一部分中,我默认添加了年龄“”,然后用我得到的年龄更新它。如果您只想要非空出生,那么您收到的另一个答案是好的

dict_ = {}
list_names = df.cst_names.unique()
for name in df.cst_names.unique():
    dict_[name]=""
df = df[df["birth_year"]!=""]
for name in df.cst_names.unique():
    dict_[name]= df.loc[df["cst_names"]==name, "birth_year"].values[0]

应用版本

result_dict=df[df['birth_year']!=''].groupby('cst_names').apply(lambda row: row['birth_year']).reset_index()[['cst_names','birth_year']].set_index('cst_names').T.to_dict('list')

我尝试先删除空日期,然后压缩。 我希望它对你有用

df_altered = df.drop(df[df['birth_year']==''].index)
a_dict = dict(zip(df_altered.cst_names, df_altered.birth_year))
a_dict

相关问题 更多 >

    热门问题