pandas 如何从另一个数组中获取另一个数组的值

pu82cl6c  于 10个月前  发布在  其他
关注(0)|答案(2)|浏览(117)

我有两个字母:
Data1
| 店|值|月|
| --|--|--|
| 1 | 24 | 1 |
| 1 | 28 | 2 |
| --|--||
数据2
| 店|月|
| --|--|
| [第1、2、3页]| 1 |
| [2] | 2 |
| --|--|
我需要根据以下条件将列值添加到第二个表中:表1中的月份必须与表2中的月份相匹配表1中的存储必须在表2中的存储列表中我还需要显示值的最小值。因此,如果第二个表的列存储中有多个存储,我需要添加其中的最小值。
| 店|月|值|
| --|--|--|
| [第1、2、3页]| 1 | 24 |
| [2] | 2 | 0 |
| --|--|--|
我试过lambda函数,但它不工作。

rsl1atfo

rsl1atfo1#

示例

你必须提供一个明确的例子。
我编辑了您的示例

import pandas as pd
data1 = {'store': [1, 1, 2, 2], 'value': [24, 28, 29, 0], 'month': [1, 2, 1, 2]}
data2 = {'store': [[1, 2, 3], [2]], 'month': [1, 2]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

字符串
df1:

store   value   month
0   1       24      1
1   1       28      2
2   2       29      1
3   2       0       2


df2:

store       month
0   [1, 2, 3]   1
1   [2]         2

验证码

使用explode

s = df2.explode('store').reset_index()\
       .merge(df1.groupby(['store', 'month'], as_index=False)['value'].min(), 
              how='left')\
       .groupby('index')['value'].min()
out = df2.assign(value=s)


出来

store       month   value
0   [1, 2, 3]   1       24.0 <-- 1 is 24, 2 is 29 so min is 24
1   [2]         2       0.0

snvhrwxg

snvhrwxg2#

假设两个数据集在两个 Dataframe df 1和df 2中。
首先合并两个数据集,

merged = pd.merge(df2, df1, on='month', how='left')

字符串
定义一个函数从'value'列中获取最小值;

def get_min_value(row):
    if pd.notna(row['store']):
        return min(df1[df1['store'].isin(row['store'])]['value'])
    else:
        return 0


对合并后的数据框中的每一行应用此函数;

merged['value'] = merged.apply(get_min_value, axis=1)


删除其他列;

result = merged[['store', 'month', 'value']]

相关问题