Python,数据框,如何删除列中的一些值,并添加NaN,然后​​将该列与现有表结合起来?

Posted

技术标签:

【中文标题】Python,数据框,如何删除列中的一些值,并添加NaN,然后​​将该列与现有表结合起来?【英文标题】:Python, dataframe, how to delete some values in a column, and add NaN, then combine the column with the existed table? 【发布时间】:2018-07-11 04:14:14 【问题描述】:

这是我的桌子的样子:

df=pd.DataFrame(np.random.rand(60).reshape(20,3))
df.columns=['price','time','1-D']

现在,我想再添加 9 列,分别是“2-D”、“3-D”、....、“10-D”。 “2-D”中的值是:“NaN”加上“1-D”中的所有值,但删除最后一个值(因为我首先添加了“NaN”。与“3-D”相同:“NaN” + 列['2-D']。

这是我想要得到的结果:

Out[153]: 
       price      time       1-D       2-D       3-D       4-D       5-D  \
0   0.414901  0.173058  0.403901       NaN       NaN       NaN       NaN   
1   0.918011  0.262294  0.641516  0.403901       NaN       NaN       NaN   
2   0.524934  0.051661  0.329890  0.641516  0.403901       NaN       NaN   
3   0.654412  0.867551  0.263398  0.329890  0.641516  0.403901       NaN   
4   0.107087  0.192514  0.598509  0.263398  0.329890  0.641516  0.403901   
5   0.232152  0.144453  0.107699  0.598509  0.263398  0.329890  0.641516   
6   0.105883  0.243597  0.602938  0.107699  0.598509  0.263398  0.329890   
7   0.269133  0.036553  0.749552  0.602938  0.107699  0.598509  0.263398   
8   0.144464  0.516613  0.179333  0.749552  0.602938  0.107699  0.598509   
9   0.901749  0.908061  0.025336  0.179333  0.749552  0.602938  0.107699   
10  0.247895  0.231501  0.157868  0.025336  0.179333  0.749552  0.602938   
11  0.132763  0.501174  0.171977  0.157868  0.025336  0.179333  0.749552   
12  0.165358  0.407833  0.284734  0.171977  0.157868  0.025336  0.179333   
13  0.960481  0.511533  0.249719  0.284734  0.171977  0.157868  0.025336   
14  0.016045  0.512287  0.206942  0.249719  0.284734  0.171977  0.157868   
15  0.948984  0.911282  0.269408  0.206942  0.249719  0.284734  0.171977   
16  0.470319  0.468252  0.289175  0.269408  0.206942  0.249719  0.284734   
17  0.751353  0.167094  0.531566  0.289175  0.269408  0.206942  0.249719   
18  0.854261  0.894898  0.513595  0.531566  0.289175  0.269408  0.206942   
19  0.016631  0.110026  0.797857  0.513595  0.531566  0.289175  0.269408   

         6-D       7-D       8-D       9-D      10-D  
0        NaN       NaN       NaN       NaN       NaN  
1        NaN       NaN       NaN       NaN       NaN  
2        NaN       NaN       NaN       NaN       NaN  
3        NaN       NaN       NaN       NaN       NaN  
4        NaN       NaN       NaN       NaN       NaN  
5   0.403901       NaN       NaN       NaN       NaN  
6   0.641516  0.403901       NaN       NaN       NaN  
7   0.329890  0.641516  0.403901       NaN       NaN  
8   0.263398  0.329890  0.641516  0.403901       NaN  
9   0.598509  0.263398  0.329890  0.641516  0.403901  
10  0.107699  0.598509  0.263398  0.329890  0.641516  
11  0.602938  0.107699  0.598509  0.263398  0.329890  
12  0.749552  0.602938  0.107699  0.598509  0.263398  
13  0.179333  0.749552  0.602938  0.107699  0.598509  
14  0.025336  0.179333  0.749552  0.602938  0.107699  
15  0.157868  0.025336  0.179333  0.749552  0.602938  
16  0.171977  0.157868  0.025336  0.179333  0.749552  
17  0.284734  0.171977  0.157868  0.025336  0.179333  
18  0.249719  0.284734  0.171977  0.157868  0.025336  
19  0.206942  0.249719  0.284734  0.171977  0.157868  

【问题讨论】:

谢谢,我知道这是一个超级简单的问题,但对我来说,我两周前才开始使用 python,而且我已经在这个小问题上尝试了一整天。 【参考方案1】:

我认为你可以使用assign和shift:

df.assign(**'-D'.format(i): df['1-D'].shift(i-1) for i in range(2,11))

一点解释:

'-D'.format(i): df['1-D'].shift(i-1) for i in range(2,11)

构建一个以列名作为键、列系列作为值的字典。 ** 运算符解包字典键和值,并将它们作为参数提供给分配函数。和调用一样:

df.assign(2-D=xxx, 3-D=yyy...)

【讨论】:

谢谢,这么短而复杂的代码,而且非常漂亮!为了更好地理解,我将它分成几个步骤! 感谢您的编辑,这部分我可以理解:'-D'.format(i): df['1-D'].shift(i-1) for i in range(2,11),但我不明白这里的**是什么意思?

以上是关于Python,数据框,如何删除列中的一些值,并添加NaN,然后​​将该列与现有表结合起来?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查同一数据框列中的重复值并通过根据频率删除行来应用 if 条件?

如何从熊猫数据框中的列中删除字符串值

如何从访问数据库列中获取每个唯一值并添加到组合框项目

使用Python中的循环一一删除数据框中列中具有最小值的观察值

如何使用熊猫从另一个数据框 B 的列中删除包含特定数量值的数据框 A 中的行?

如何从 Python 的数据框列中的字符串中删除非字母数字字符?