在数据框中执行行乘法
Perform row multiplication in data frame
我想在 pandas 中执行以下操作,我不想将我的 Dataframe 转换为数组来执行。
date A B C D E ...
date1 0,03 0,02 0,01 0,01 0,234
date2 0,03 0,02 0,01 0,01 0,234
date3 0,03 0,02 0,01 0,01 0,234
date4 0,03 0,02 0,01 0,01 0,234
数字不一样,有很多小数。
我想在另一个数据框中创建以下内容:
date value
date1 (1+0,03)*(1+0,02)*(1+0,01)*(1+0,01)*(1+0,234)
date2 (1+0,03)*(1+0,02)*(1+0,01)*(1+0,01)*(1+0,234)
date3 (1+0,03)*(1+0,02)*(1+0,01)*(1+0,01)*(1+0,234)
date4 (1+0,03)*(1+0,02)*(1+0,01)*(1+0,01)*(1+0,234)
有些单元格的值为空,我想跳过这些值。
我会展示我一直在尝试的东西,但我所做的是转换为数组并执行操作,我丢失了我的数据并且不能跳过空值。
如有必要,按日期创建索引 DataFrame.set_index
, then add 1
for each value and use DataFrame.prod
:
#if not numeric values replace , and convert to floats
#df = df.replace(',','.', regex=True)
df1 = df.set_index('date').astype(float).add(1).prod(axis=1).reset_index(name='value')
print (df1)
date value
0 date1 1.322499
1 date2 1.322499
2 date3 1.322499
3 date4 1.322499
缺失值测试:
print (df)
date A B C D E
0 date1 0,03 0,02 0,01 0,01 NaN
1 date2 0,03 0,02 0,01 0,01 0,234
2 date3 0,03 0,02 0,01 0,01 0,234
3 date4 0,03 0,02 0,01 0,01 0,234
df = df.replace(',','.', regex=True)
print (df.set_index('date').astype(float).add(1))
A B C D E
date
date1 1.03 1.02 1.01 1.01 NaN
date2 1.03 1.02 1.01 1.01 1.234
date3 1.03 1.02 1.01 1.01 1.234
date4 1.03 1.02 1.01 1.01 1.234
df1 = df.set_index('date').astype(float).add(1).prod(axis=1).reset_index(name='value')
print (df1)
date value
0 date1 1.071717
1 date2 1.322499
2 date3 1.322499
3 date4 1.322499
我想在 pandas 中执行以下操作,我不想将我的 Dataframe 转换为数组来执行。
date A B C D E ...
date1 0,03 0,02 0,01 0,01 0,234
date2 0,03 0,02 0,01 0,01 0,234
date3 0,03 0,02 0,01 0,01 0,234
date4 0,03 0,02 0,01 0,01 0,234
数字不一样,有很多小数。 我想在另一个数据框中创建以下内容:
date value
date1 (1+0,03)*(1+0,02)*(1+0,01)*(1+0,01)*(1+0,234)
date2 (1+0,03)*(1+0,02)*(1+0,01)*(1+0,01)*(1+0,234)
date3 (1+0,03)*(1+0,02)*(1+0,01)*(1+0,01)*(1+0,234)
date4 (1+0,03)*(1+0,02)*(1+0,01)*(1+0,01)*(1+0,234)
有些单元格的值为空,我想跳过这些值。 我会展示我一直在尝试的东西,但我所做的是转换为数组并执行操作,我丢失了我的数据并且不能跳过空值。
如有必要,按日期创建索引 DataFrame.set_index
, then add 1
for each value and use DataFrame.prod
:
#if not numeric values replace , and convert to floats
#df = df.replace(',','.', regex=True)
df1 = df.set_index('date').astype(float).add(1).prod(axis=1).reset_index(name='value')
print (df1)
date value
0 date1 1.322499
1 date2 1.322499
2 date3 1.322499
3 date4 1.322499
缺失值测试:
print (df)
date A B C D E
0 date1 0,03 0,02 0,01 0,01 NaN
1 date2 0,03 0,02 0,01 0,01 0,234
2 date3 0,03 0,02 0,01 0,01 0,234
3 date4 0,03 0,02 0,01 0,01 0,234
df = df.replace(',','.', regex=True)
print (df.set_index('date').astype(float).add(1))
A B C D E
date
date1 1.03 1.02 1.01 1.01 NaN
date2 1.03 1.02 1.01 1.01 1.234
date3 1.03 1.02 1.01 1.01 1.234
date4 1.03 1.02 1.01 1.01 1.234
df1 = df.set_index('date').astype(float).add(1).prod(axis=1).reset_index(name='value')
print (df1)
date value
0 date1 1.071717
1 date2 1.322499
2 date3 1.322499
3 date4 1.322499