Python使用一列表示数据帧的总和
我有一个Python数据帧:Python使用一列表示数据帧的总和,python,python-2.7,pandas,dataframe,sum,Python,Python 2.7,Pandas,Dataframe,Sum,我有一个Python数据帧: df = pd.DataFrame(np.random.rand(5,3),columns=list('ABC')) print df A B C 0 0.041761178 0.60439116 0.349372206 1 0.820455992 0.245314299 0.635568504 2 0.517482167 0.7257227 0.982969949 3 0.2
df = pd.DataFrame(np.random.rand(5,3),columns=list('ABC'))
print df
A B C
0 0.041761178 0.60439116 0.349372206
1 0.820455992 0.245314299 0.635568504
2 0.517482167 0.7257227 0.982969949
3 0.208934899 0.594973111 0.671030326
4 0.651299752 0.617672419 0.948121305
问题:
我想将第一列添加到整个数据帧中。我想得到这个:
A B C
0 0.083522356 0.646152338 0.391133384
1 1.640911984 1.065770291 1.456024496
2 1.034964334 1.243204867 1.500452116
3 0.417869798 0.80390801 0.879965225
4 1.302599505 1.268972171 1.599421057
对于第一行:
- A:0.04176+0.04176=0.08352
- B:0.04176+0.60439=0.64615
- 等
df.A
不可接受<代码>测向。可以接受iloc[:,0]
尝试:
我尝试了以下方法:
print df.add(df.iloc[:,0], fill_value=0)
但它不起作用。它返回错误消息:
Traceback (most recent call last):
File "C:test.py", line 20, in <module>
print df.add(df.iloc[:,0], fill_value=0)
File "C:\python27\lib\site-packages\pandas\core\ops.py", line 771, in f
return self._combine_series(other, na_op, fill_value, axis, level)
File "C:\python27\lib\site-packages\pandas\core\frame.py", line 2939, in _combine_series
return self._combine_match_columns(other, func, level=level, fill_value=fill_value)
File "C:\python27\lib\site-packages\pandas\core\frame.py", line 2975, in _combine_match_columns
fill_value)
NotImplementedError: fill_value 0 not supported
回溯(最近一次呼叫最后一次):
文件“C:test.py”,第20行,在
打印df.add(df.iloc[:,0],填充值=0)
文件“C:\python27\lib\site packages\pandas\core\ops.py”,第771行,在f中
返回自身。组合系列(其他、不适用、填充值、轴、标高)
文件“C:\python27\lib\site packages\pandas\core\frame.py”,第2939行,在系列中
返回self.\u combine\u match\u列(其他,func,级别=级别,填充值=填充值)
文件“C:\python27\lib\site packages\pandas\core\frame.py”,第2975行,在\u combine\u match\u列中
填充(U值)
NotImplementedError:不支持填充值0
是否可以用第一列计算数据帧中所有列的总和?我会尝试以下方法:
firstol = df.columns[0]
df2 = df.add(df[firstcol], axis=0)
我想试试这样的东西:
firstol = df.columns[0]
df2 = df.add(df[firstcol], axis=0)
这就是你需要做的:
df.add(df.A, axis=0)
Example:
>>> df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
>>> col_0 = df.columns.tolist()[0]
>>> print df
A B C
0 0.502962 0.093555 0.854267
1 0.165805 0.263960 0.353374
2 0.386777 0.143079 0.063389
3 0.639575 0.269359 0.681811
4 0.874487 0.992425 0.660696
>>> df = df.add(df.col_0, axis=0)
>>> print df
A B C
0 1.005925 0.596517 1.357229
1 0.331611 0.429766 0.519179
2 0.773553 0.529855 0.450165
3 1.279151 0.908934 1.321386
4 1.748975 1.866912 1.535183
>>>
这就是你需要做的:
df.add(df.A, axis=0)
Example:
>>> df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
>>> col_0 = df.columns.tolist()[0]
>>> print df
A B C
0 0.502962 0.093555 0.854267
1 0.165805 0.263960 0.353374
2 0.386777 0.143079 0.063389
3 0.639575 0.269359 0.681811
4 0.874487 0.992425 0.660696
>>> df = df.add(df.col_0, axis=0)
>>> print df
A B C
0 1.005925 0.596517 1.357229
1 0.331611 0.429766 0.519179
2 0.773553 0.529855 0.450165
3 1.279151 0.908934 1.321386
4 1.748975 1.866912 1.535183
>>>
我结合以上两篇文章来回答这个问题 因为我不能通过名称引用特定列,所以我不能使用
df.add(df.a,axis=0)
。但这是正确的。由于df+=df[firstcol]
生成了一个NaN
s的数据帧,因此我不能使用这种方法,但是这个解决方案从数据帧获取列列表的方式是我需要的技巧
我是这样做的:
col_0 = df.columns.tolist()[0]
print(df.add(df[col_0], axis=0))
我结合以上两篇文章来回答这个问题 因为我不能通过名称引用特定列,所以我不能使用
df.add(df.a,axis=0)
。但这是正确的。由于df+=df[firstcol]
生成了一个NaN
s的数据帧,因此我不能使用这种方法,但是这个解决方案从数据帧获取列列表的方式是我需要的技巧
我是这样做的:
col_0 = df.columns.tolist()[0]
print(df.add(df[col_0], axis=0))
您可以为此使用
numpy
和广播:
df = pd.DataFrame(df.values + df['A'].values[:, None],
columns=df.columns)
我希望这比基于系列的方法更有效。您可以使用
numpy
和广播来实现这一点:
df = pd.DataFrame(df.values + df['A'].values[:, None],
columns=df.columns)
我希望这比基于系列的方法更有效。您的答案方法正确,但我无法按名称命名列。我更新了答案。如果你需要答案,别忘了批准。谢谢。这个帖子已经解决了。我所有的问题都在这里得到了回答。您的回答方法正确,但我无法按名称命名列。我更新了答案。如果你需要答案,别忘了批准。谢谢。这个帖子已经解决了。我所有的问题都在这里得到了回答。