现存在df1和df2,df1拥有A列,A列内值为不重复的字符串,新建df1的B列,内容为,df2中C列于A列的字符串相等的D列数字之和。举例df1A列内值按顺序为'吃饭'、'睡觉'、'打游戏',则df1B列的值按顺序为df2C列"吃饭"对应的D列数值之和、df2C列"睡觉"对应的D列数值之和、df2C列"打游戏"对应的D列数值之和。
时间: 2024-04-15 10:28:40 浏览: 191
要按顺序将df2中对应的D列数值之和赋值给df1的B列,可以利用`map`函数和`groupby`函数。首先,将df2按照C列进行分组,并计算D列的和。然后,使用`map`函数将df2中每个C列对应的D列数值之和映射到df1的B列。
下面是一个示例代码:
```python
# 按照C列分组并计算D列的和
grouped_df2 = df2.groupby('C')['D'].sum()
# 使用map函数将df2中每个C列对应的D列数值之和映射到df1的B列
df1['B'] = df1['A'].map(grouped_df2)
```
请确保df1和df2的列名与代码中的列名一致,以及数据类型正确。注意,如果df1的A列中有某些值在df2的C列中找不到对应的值,那么对应的B列将会被赋值为NaN。
相关问题
现有Df1、df2,df1拥有A、B两列,df1新建第三列,进行判断:若A、B同时满足存在于df2内,则C列写入"买卖",如果只有A存在于df2内,则C写入"买",如果只有B存在于df2内,则C写入"卖",如果A和B都不存在于df2内,则C写入"空"
在Python的pandas库中,你可以通过以下步骤来实现这个逻辑:
```python
import pandas as pd
# 假设df1和df2已经定义好
df1 = ... # df1的数据
df2 = ... # df2的数据
# 新建一个全0的df1副本,并添加C列
df1_copy = df1.copy()
df1_copy['C'] = ''
# 使用条件布尔索引来填充C列
df1_copy.loc[(df1_copy['A'].isin(df2['A']) & df1_copy['B'].isin(df2['B'])), 'C'] = '买卖'
df1_copy.loc[df1_copy['A'].isin(df2['A']), 'C'] = '买'
df1_copy.loc[df1_copy['B'].isin(df2['B']), 'C'] = '卖'
# 对于既不在df2['A']也不在df2['B']中的行,将C列设置为'空'
df1_copy.loc[~((df1_copy['A'].isin(df2['A'])) | (df1_copy['B'].isin(df2['B']))), 'C'] = '空'
df1_copy
```
在这个例子中,我们首先创建了df1的一个副本df1_copy,然后使用`isin()`函数检查每个元素是否在df2的对应列中存在。最后,我们使用布尔索引来决定如何填写'C'列。
现有Df1、df2,df1拥有A、B两列,df2只有两列数据,df1新建第三列,进行判断:若A、B同时满足存在于df2内,则C列写入"买卖",如果只有A存在于df2内,则C写入"买",如果只有B存在于df2内,则C写入"卖",如果A和B都不存在于df2内,则C写入"空"
在Python的Pandas库中,你可以使用条件布尔索引来实现这样的操作。首先,你需要创建一个笛卡尔积(Cartesian product)来检查每个组合(A, B)是否都在df2中,然后根据结果填充df1的新列C。以下是具体的步骤:
```python
import pandas as pd
# 假设 df1 和 df2 是 DataFrame 的实例
df1 = pd.DataFrame({'A': df1['A'].tolist(), 'B': df1['B'].tolist()})
df2 = pd.DataFrame({'Column1': df2['Column1'].tolist(), 'Column2': df2['Column2'].tolist()})
# 创建笛卡尔积
combined_df = pd.merge(df1, df2, how='outer', indicator=True)
# 根据合并结果填写新列C
combined_df['C'] = np.select(
[
(combined_df['_merge'] == 'both'), # A和B同时存在
(combined_df['_merge'] == 'left_only') & (combined_df['Column1'].notna()), # 只有A存在
(combined_df['_merge'] == 'right_only') & (combined_df['Column2'].notna()), # 只有B存在
(combined_df['_merge'] == 'none') # A和B都不存在
],
['买卖', '买', '卖', '空'],
default='空'
)
# 将结果回填到原始df1
df1['C'] = combined_df[df1.index]['C']
# 删除临时用于合并的 '_merge' 列
df1.drop('_merge', axis=1, inplace=True)
```
在这个例子中,`np.select`函数根据不同的条件选择相应的字符串并填充到新列C中。最后别忘了删除临时添加的 `_merge` 列。
阅读全文