dataframe 两个列求和,生成一个新的列
时间: 2023-06-06 08:04:55 浏览: 143
你可以使用 pandas 库中的 sum 函数来实现这个功能。代码如下:
```python
df['new_col'] = df['col1'] + df['col2']
```
其中,df 表示你的 dataframe,col1 和 col2 表示需要相加的两个列,new_col 表示生成的新列。
相关问题
dataframe,列A有两种取值,一种是“A”,一种是“B"。现在想针对列A=”A"时,将列B和列C的数据求和并生成列“A_股票"; 针对列A=”B"时,将列B和列C的数据求差并生成列“B_股票";
您好!感谢您使用ChitGPT进行交互。根据您的问题描述,您需要对DataFrame的两个列进行不同的汇总计算并生成新的列,具体实现代码如下:
```
# 导入pandas库
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'A': ['A', 'A', 'B', 'B'],
'B': [1, 2, 3, 4],
'C': [5, 6, 7, 8]})
# 对列A进行不同汇总计算,并生成新列
df.loc[df['A'] == 'A', 'A_股票'] = df.loc[df['A'] == 'A', ['B', 'C']].sum(axis=1)
df.loc[df['A'] == 'B', 'B_股票'] = df.loc[df['A'] == 'B', ['B', 'C']].diff(axis=1)['C']
# 查看结果
print(df)
```
以上代码中,我们首先导入了pandas库,然后创建了一个DataFrame,其中列A有两种取值(A和B),列B和列C分别是待汇总的数据列。接着,我们使用.loc方法选择列A为A的数据行和列A为B的数据行,并分别对它们进行不同的汇总计算。对于列A为A的数据行,我们使用.sum方法对列B和列C进行求和,并生成新列‘A_股票’;对于列A为B的数据行,我们使用.diff方法对列B和列C求差,并只选取差值列C,最后生成新列‘B_股票’。最后,我们使用print方法输出汇总结果。
希望这个回答能够对您有所帮助,如果您有其他问题需要咨询,请继续询问。
如何使用Pandas将两个DataFrame根据列名合并,当列名相同时,对应数值应相加以生成新的一列?
在Pandas中,你可以使用`concat()`、`join()`或`merge()`函数来合并两个DataFrame,如果列名相同且需要进行数值相加,最常用的是`merge()`或`add()`方法。
1. `concat()`: 如果你需要简单地水平拼接数据,并保持列名一致,可以使用`pd.concat()`,传入`axis=1`参数表示按列合并:
```python
df_result = pd.concat([df1, df2], axis=1)
```
然后你可以用`fillna(0)`填充NaN值,再用`df_result.iloc[:, i] += df_result.iloc[:, j]`这样的行级操作对对应位置的数值求和,其中i和j分别是列名的索引。
2. `merge()`: 更推荐`merge()`,因为它允许更复杂的合并条件,例如基于特定列的匹配。假设两个DataFrame有一个共同的键列(key),你可以这样做:
```python
merged_df = pd.merge(df1, df2, on='common_column', how='outer')
```
然后选择需要相加的列并求和:
```python
merged_df['new_column'] = merged_df[['column_to_add_1', 'column_to_add_2']].sum(axis=1)
```
3. `add()` 或 `add_prefix()` + `sum(axis=1)`: 直接在一个已经包含所有数据的DataFrame上使用`add()`函数,或先给列添加前缀避免命名冲突,然后沿列方向求和:
```python
df_result = (df1.add(df2, fill_value=0)
.add_prefix('_').rename(columns=lambda x: x[1:])
.groupby(level=0).sum())
```
这将创建一个新的DataFrame,其中每个公共列都有两个版本(来自df1和df2),它们被相加。
阅读全文