单元格 pandas 中的查找值和求和值

Lookup Values and sum values in cell pandas

我有两个数据框:

df1 = pd.DataFrame({'Code' : ['10', '100', '1010'],
                     'Value' : [25, 50, 75]})

df2 = pd.DataFrame({'ID' : ['A', 'B', 'C'],
                     'Codes' : ['10', '100;1010', '100'],
                     'Value' : [25, 125, 50]})

df2 中的“代码”列可以包含以“;”分隔的多个代码。如果是这种情况,我需要从 df1 中总结它们的值。

我试过.map(),但这对连续有多个代码的行不起作用。另外,我最终将代码“1010”转换为值“2525”。

如何为“;”指定完美匹配和求和分隔值?

  • explode() 代码列表
  • merge()df1 并计算总数,根据 df2
  • 的索引分组
  • 已使用此计算结果创建了一个新列
df1 = pd.DataFrame({"Code": ["10", "100", "1010"], "Value": [25, 50, 75]})

df2 = pd.DataFrame(
    {"ID": ["A", "B", "C"], "Codes": ["10", "100;1010", "100"], "Value": [25, 125, 50]}
)

df2.join(
    df2["Codes"]
    .str.split(";")
    .explode()
    .reset_index()
    .merge(df1, left_on="Codes", right_on="Code")
    .groupby("index")
    .agg({"Value": "sum"}),
    rsuffix="_calc",
)
ID Codes Value Value_calc
0 A 10 25 25
1 B 100;1010 125 125
2 C 100 50 50
def sum(df1, df2):
    df1['sum'] = df1['Value'] + df2['Value']
    print(df1)


df1.loc[df2['Codes'].isin(df1['Code'])].apply(sum(df1, df2))

如果 df2 中的代码在 df1 中,则添加值

我们可以从 Code 查找 table 到 df1Value 的映射,然后在 df2 上使用 .map() 进行映射Codes 到映射的扩展列表。最后,将相同ID的映射值相加,得到想要的值,如下:

1.从 df1:

中查找 CodeValue 的映射
mapping = df1.set_index('Code')['Value']

2。在 df2 上使用 .map()Codes 的扩展列表映射到映射。将相同 ID 的映射值相加以得出所需的值:

df2a = df2.set_index('ID')             # set `ID` as index

df2a['value_map'] = (
    df2a['Codes'].str.split(';')       # split by semicolon 
                 .explode()            # expand splitted values into rows
                 .map(mapping)         # map Code from mapping                
                 .groupby('ID').sum()  # group sum by ID
    )

df2 = df2a.reset_index()               # reset `ID` from index back to data column

结果:

print(df2)

  ID     Codes  Value  value_map
0  A        10     25         25
1  B  100;1010    125        125
2  C       100     50         50