我有下面的数据框-
df =
1.0 2.0 3.0 4.0 5.0
(1083, 596) (1050, 164) (1050, 164)
(1081, 595) (1050, 164) (1080, 162)
(1081, 594) (1049, 163) (1070, 164)
(1082, 593)
(1050, 164)
(1050, 164)
(1049, 163)
(1049, 163)
(1052, 463)
(1051, 468)
(1054, 465)
(1057, 463)
我需要一个全新的数据帧,df2
,有3列:1.0、2.0(结合2.0和4.0)和3.0(结合3.0和5.0)。
结果将是-
df2 =
1.0 2.0 3.0
(1083, 596) (1050, 164) (1050, 164)
(1081, 595) (1050, 164) (1080, 162)
(1081, 594) (1049, 163) (1070, 164)
(1082, 593)
(1050, 164)
(1050, 164)
(1049, 163)
(1049, 163)
(1052, 463)
(1051, 468)
(1054, 465)
(1057, 463)
您可以预期合并列中不会有重叠的值;如果一行中的一列具有有效值,那么其他列将具有NaN值。
我试过了-
df.fillna(0)
df2['2.0']=df['2.0']+df['4.0']
而且它并没有按预期的那样工作。有没有简单有效的方法来做到这一点?
假设df
中的空格是NaN
s。您只需要将shift列'2.0、3.0、4.0、5.0'
左移2个位置,然后将首先与
df
组合。最后,使用iloc
df2 = df.combine_first(df.drop('1.0',1).shift(-2, axis=1)).iloc[:,:3]
Out[297]:
1.0 2.0 3.0
0 (1083, 596) (1050, 164) (1050, 164)
1 (1081, 595) (1050, 164) (1080, 162)
2 (1081, 594) (1049, 163) (1070, 164)
3 (1082, 593) NaN NaN
4 NaN (1050, 164) NaN
5 NaN (1050, 164) NaN
6 NaN (1049, 163) NaN
7 NaN (1049, 163) NaN
8 NaN NaN (1052, 463)
9 NaN NaN (1051, 468)
10 NaN NaN (1054, 465)
11 NaN NaN (1057, 463)
基本上就是复制粘贴。我认为这行得通。
# copy values over to your other columns
# note: [0:3,'2.0'] gets the first 4 rows (index 0 to 3) of column '2.0'
# then you set it equal to the first 4 rows of column '4.0'
df.loc[0:3,'2.0'] = df.loc[0:3,'4.0']
df.loc[0:3,'3.0'] = df.loc[0:3,'5.0']
# just get the three columns you need
df2 = df[['1.0','2.0','3.0']]
1.0 2.0 3.0
0 (1083, 596) (1050, 164) (1050, 164)
1 (1081, 595) (1050, 164) (1080, 162)
2 (1081, 594) (1049, 163) (1070, 164)
3 (1082, 593) NaN NaN
4 NaN (1050, 164) NaN
5 NaN (1050, 164) NaN
6 NaN (1049, 163) NaN
7 NaN (1049, 163) NaN
8 NaN NaN NaN
9 NaN NaN (1052, 463)
10 NaN NaN (1051, 468)
11 NaN NaN (1054, 465)
12 NaN NaN (1057, 463)
如果您的列名实际上是浮点数,请删除这些部分的引号:df.loc[0:3,'2.0']
例如更改为df.loc[0:3,2.0]
,如:
df.loc[0:3,2.0] = df.loc[0:3,4.0]
df.loc[0:3,3.0] = df.loc[0:3,5.0]
您可以使用DataFrame.where()
和DataFrame.isnull()
以尝试的方式混合值:
df2 = pd.DataFrame(df["1.0"], columns=["1.0"])
df2["2.0"] = df["2.0"].where(~df2["2.0"].isnull(), df2["4.0"])
df2["3.0"] = df["3.0"].where(~df2["3.0"].isnull(), df2["5.0"])
问题内容: 我有不同的数据框,需要根据日期列将它们合并在一起。如果我只有两个数据帧,则可以使用来对三个数据帧进行操作,但是,使用多个数据帧将变得非常复杂且难以读取。 所有数据框都有一个共同的列- ,但是它们没有相同数量的行或列,而我只需要每个数据框共有每个日期的那些行。 因此,我正在尝试编写一个递归函数,该函数返回一个包含所有数据的数据框,但是它不起作用。那我应该如何合并多个数据框? 我试图dif
我有两个系列和具有相同的(非连续的)索引。如何将和组合为DataFrame中的两列,并将其中一个索引保留为第三列?
问题内容: 我正在尝试使用两列来连接两个熊猫数据框: 但出现以下错误: 任何想法应该是正确的方法吗?谢谢! 问题答案: 尝试这个 https://pandas.pydata.org/pandas- docs/stable/reference/api/pandas.DataFrame.merge.html left_on:要在左侧DataFrame中加入的标签或列表或类似数组的字段名称。可以是Dat
我想对两列使用不同的条件来聚合行。 当我做,我得到输出1 当我做时,我得到输出2 是否有一种方法可以进行聚合,将输出1显示到,将输出2显示到?
我有一个csv文件列表,我使用 我目前正在尝试遍历csv列表,并使用方法将axis参数设置为1,以按列将所有数据帧添加到一起。 它是工作的希望,但我遇到的问题,因为所有的数据帧都有相同的冒号名称,当我连接他们我得到例如10列都与关键"日期" 不管怎样,我能给哥伦布起个独一无二的名字吗?比如伦敦约会,柏林约会?显然,这些名称基于数据帧的名称。
问题内容: 我在加入熊猫方面遇到问题,并且试图找出问题所在。假设我有一个x: 我应该能够通过简单的连接命令在y = x上将y与索引上的y联接,除了同名具有+2。 我希望决赛对双方都有1941个非值。我也尝试过合并,但是我有同样的问题。 我以为正确的答案是pandas.concat([x,y]),但这也不符合我的预期。 编辑:如果您在加入方面遇到问题,请阅读下面的韦斯答案。我有一个重复的时间戳。 问