从数据框添加一列,即 df['constant'] 到数据框 df 的所有其他列。当 NAN + float 出现时 return float
Adding a column from a dataframe i.e. df['constant'] to all the other columns of the dataframe df. When NAN + float appears return the float
我有一个包含 a、b、c 列和常量的数据框 df。
|a |b |c |constant|
id | | | | |
000|0 |0.2 |0.5 |0.7 |
111|0 |-0.3|0.1 |0.9 |
222|0 |NAN |0.6 |0.3 |
333|0 |1 |0.8 |0.5 |
444|0 |0.2 |1 |1.1 |
555|0 |0.8 |NAN |-0.3 |
666|0 |-0.5|-0.6|NAN |
我想将列 df['constant'] 添加到数据框的所有其他列,并用总和替换当前列。即 df['a'] 与 df['constant'] 相同,因为它全为 0。新数据框应如下所示:
|a |b |c |constant|
id | | | | |
000|0.7 |0.9 |1.2 |0.7 |
111|0.9 |0.6 |1 |0.9 |
222|0.3 |0.3 |0.9 |0.3 |
333|0.5 |1.5 |1.3 |0.5 |
444|1.1 |1.3 |2.1 |1.1 |
555|-0.3|0.5 |-0.3|-0.3 |
666|0 |-0.5|-0.6|NAN |
注意:如果将 NAN 添加到浮点数,则应返回浮点数
我的 3 次尝试如下所示:
尝试 1 使用了函数并且 pd.to_numeric
尝试 2 我使用了 2 个函数,def adds(x,y) 我希望能修复类型错误
尝试 3 我厌倦了与尝试 2 相同的操作,但使用了 lambda 表达式
df2['constant'] = pd.to_numeric(df2['constant'], errors='coerce')
df2['constant'] = df2['constant'].fillna(0)
dataframe_columns = ['a','b','c']
##attempt number 1
# add merged-constant across df
for c in dataframe_columns:
df2[c] = pd.to_numeric(df2[c], errors='coerce')
df2[c] = df2[c].add(df2['constant'])
##attempt number 2
def adds(x,y):
if isinstance(x, float) and isinstance(y, float)==True:
return x+y
elif isinstance(x, float) and isinstance(y, object):
return x
elif isinstance(x, object) and isinstance(y, float):
return y
else:
return y
# add merged-constant across df2
for c in dataframe_columns:
df2[c] = adds(df2[c], dfc['constant'])
##attempt number 3
def adds(x,y):
if isinstance(x, float) and isinstance(y, float)==True:
return x+y
elif isinstance(x, float) and isinstance(y, object):
return x
elif isinstance(x, object) and isinstance(y, float):
return y
else:
return y
#lambda test add merged-constant across df2
for c in dataframe_columns:
return c
df2[dataframe_columns] = df2.apply(lambda x: adds(x[dataframe_columns], x['constant']), axis = 1)
我想要一个新的数据框,a、b 和 c 列都将常量列添加到其总数中,如上所示。
因为在 pd.Series.add 中我们有 fill_value=0(不确定为什么数据框 +Series 不起作用),所以我们只对每一列使用它,然后 concat
返回 update
原版df
df=df.apply(pd.to_numeric,errors='coerce')
df.update(pd.concat([df[x].add(df.constant,fill_value=0) for x in df.columns[:-1]],keys=df.columns[:-1],axis=1))
df
Out[116]:
a b c constant
0
1 0.7 0.9 1.2 0.7
2 0.9 0.6 1.0 0.9
3 0.3 0.3 0.9 0.3
4 0.5 1.5 1.3 0.5
5 1.1 1.3 2.1 1.1
6 -0.3 0.5 -0.3 -0.3
7 0.0 -0.5 -0.6 NaN
我使用 fillna
、add
和 join
df[['a', 'b', 'c']].fillna(0).add(df['constant'].fillna(0), axis=0).join(df.constant)
Out[391]:
a b c constant
id
000 0.7 0.9 1.2 0.7
111 0.9 0.6 1.0 0.9
222 0.3 0.3 0.9 0.3
333 0.5 1.5 1.3 0.5
444 1.1 1.3 2.1 1.1
555 -0.3 0.5 -0.3 -0.3
666 0.0 -0.5 -0.6 NaN
我有一个包含 a、b、c 列和常量的数据框 df。
|a |b |c |constant|
id | | | | |
000|0 |0.2 |0.5 |0.7 |
111|0 |-0.3|0.1 |0.9 |
222|0 |NAN |0.6 |0.3 |
333|0 |1 |0.8 |0.5 |
444|0 |0.2 |1 |1.1 |
555|0 |0.8 |NAN |-0.3 |
666|0 |-0.5|-0.6|NAN |
我想将列 df['constant'] 添加到数据框的所有其他列,并用总和替换当前列。即 df['a'] 与 df['constant'] 相同,因为它全为 0。新数据框应如下所示:
|a |b |c |constant|
id | | | | |
000|0.7 |0.9 |1.2 |0.7 |
111|0.9 |0.6 |1 |0.9 |
222|0.3 |0.3 |0.9 |0.3 |
333|0.5 |1.5 |1.3 |0.5 |
444|1.1 |1.3 |2.1 |1.1 |
555|-0.3|0.5 |-0.3|-0.3 |
666|0 |-0.5|-0.6|NAN |
注意:如果将 NAN 添加到浮点数,则应返回浮点数
我的 3 次尝试如下所示:
尝试 1 使用了函数并且 pd.to_numeric
尝试 2 我使用了 2 个函数,def adds(x,y) 我希望能修复类型错误
尝试 3 我厌倦了与尝试 2 相同的操作,但使用了 lambda 表达式
df2['constant'] = pd.to_numeric(df2['constant'], errors='coerce')
df2['constant'] = df2['constant'].fillna(0)
dataframe_columns = ['a','b','c']
##attempt number 1
# add merged-constant across df
for c in dataframe_columns:
df2[c] = pd.to_numeric(df2[c], errors='coerce')
df2[c] = df2[c].add(df2['constant'])
##attempt number 2
def adds(x,y):
if isinstance(x, float) and isinstance(y, float)==True:
return x+y
elif isinstance(x, float) and isinstance(y, object):
return x
elif isinstance(x, object) and isinstance(y, float):
return y
else:
return y
# add merged-constant across df2
for c in dataframe_columns:
df2[c] = adds(df2[c], dfc['constant'])
##attempt number 3
def adds(x,y):
if isinstance(x, float) and isinstance(y, float)==True:
return x+y
elif isinstance(x, float) and isinstance(y, object):
return x
elif isinstance(x, object) and isinstance(y, float):
return y
else:
return y
#lambda test add merged-constant across df2
for c in dataframe_columns:
return c
df2[dataframe_columns] = df2.apply(lambda x: adds(x[dataframe_columns], x['constant']), axis = 1)
我想要一个新的数据框,a、b 和 c 列都将常量列添加到其总数中,如上所示。
因为在 pd.Series.add 中我们有 fill_value=0(不确定为什么数据框 +Series 不起作用),所以我们只对每一列使用它,然后 concat
返回 update
原版df
df=df.apply(pd.to_numeric,errors='coerce')
df.update(pd.concat([df[x].add(df.constant,fill_value=0) for x in df.columns[:-1]],keys=df.columns[:-1],axis=1))
df
Out[116]:
a b c constant
0
1 0.7 0.9 1.2 0.7
2 0.9 0.6 1.0 0.9
3 0.3 0.3 0.9 0.3
4 0.5 1.5 1.3 0.5
5 1.1 1.3 2.1 1.1
6 -0.3 0.5 -0.3 -0.3
7 0.0 -0.5 -0.6 NaN
我使用 fillna
、add
和 join
df[['a', 'b', 'c']].fillna(0).add(df['constant'].fillna(0), axis=0).join(df.constant)
Out[391]:
a b c constant
id
000 0.7 0.9 1.2 0.7
111 0.9 0.6 1.0 0.9
222 0.3 0.3 0.9 0.3
333 0.5 1.5 1.3 0.5
444 1.1 1.3 2.1 1.1
555 -0.3 0.5 -0.3 -0.3
666 0.0 -0.5 -0.6 NaN