指定された条件に基づいて、`df`と`df2`の`aaa`と`bbb`列を照合し、マッチした場合には指定された計算式 `goukei / ccc * ddd` を`df`の`zzz`列にセットし、マッチしない場合には`0`を`zzz`列にセットする処理を行うコードを示します。

```python
import pandas as pd
import numpy as np

# 例示用のDataFrame
df = pd.DataFrame({
    'aaa': ['x', 'y', 'z'],
    'bbb': [1, 2, 3],
    'zzz': np.nan  # 初期値としてNaNをセット
})

df2 = pd.DataFrame({
    'aaa': ['x', 'y', 'a'],
    'bbb': [1, 2, 4],
    'ccc': [2, 3, 5],
    'ddd': [10, 15, 20]
})

# 他の変数
goukei = 100

# dfとdf2を'aaa'と'bbb'列で照合し、マッチした行の計算を実行
df_merged = df.merge(df2'aaa', 'bbb', 'ccc', 'ddd', on=['aaa', 'bbb'], how='left')

# 計算式を適用して新しい列を生成、マッチしない場合は0をセット
df['zzz'] = (goukei / df_merged['ccc'] * df_merged['ddd']).fillna(0)

print(df)
```

このコードでは、まず`df`と`df2`を`aaa`と`bbb`列で左結合しており、`merge`関数を使用しています。左結合の結果、`df`に存在する行で`df2`とマッチするものには`df2`の`ccc`と`ddd`列の値が追加され、マッチしないものにはNaNがセットされます。

次に、`(goukei / df_merged['ccc'] * df_merged['ddd']).fillna(0)`を用いて、マッチした行に対して計算式を適用し、結果を`df`の`zzz`列にセットしています。この計算式では、まず`goukei`を`ccc`で割り、その結果に`ddd`を乗じています。マッチしない行は`fillna(0)`によって`0`で置き換えられます。

これで、条件に基づいて`df`の`zzz`列を更新する処理を実装できます。

  • import pandas as pd
    import numpy as np

# 例示用のDataFrame
df = pd.DataFrame({
    'aaa': ['x', 'y', 'z'],
    'bbb': [1, 2, 3],
    'ddd': np.nan  # 初期値としてNaNをセット
})

df2 = pd.DataFrame({
    'aaa': ['x', 'y', 'a'],
    'bbb': [1, 2, 4],
    'ccc': ['value_x', 'value_y', 'value_a']
})

# dfとdf2を'aaa'と'bbb'列で照合し、一致する場合はdf2の'ccc'の値をdfの'ddd'にセット
df = df.merge(df2'aaa', 'bbb', 'ccc', on=['aaa', 'bbb'], how='left', suffixes=('', '_y'))

# 照合しない場合は'ddd'列に0をセット
df['ddd'] = df['ccc'].fillna(0)

# 不要になった'ccc'列を削除
df.drop(columns=['ccc'], inplace=True)

print(df)

# dfとdf2のマージを試みることで、'aaa'と'bbb'で一致する行を特定する
# how='left'を使用し、dfの全ての行を保持しつつ、df2との一致を探る
# indicator=Trueにより、マージ結果の各行がどのようにマージされたか(left_only, both, right_only)がわかる列が追加される
merged_df = pd.merge(df, df2, on=['aaa', 'bbb'], how='left', indicator=True)

# マージ結果から、df2に存在しない(left_only)dfのレコードのみを抽出
df_result = merged_df[merged_df['_merge'] == 'left_only'].drop(columns=['_merge'])

df_result

import pandas as pd

# サンプルデータフレームの作成
df = pd.DataFrame({
    'aaa': ['x', 'x', 'y', 'y', 'z'],
    'bbb': [1, 1, 2, 2, 3],
    'ccc': ['A', 'B', 'C', 'D', 'E']
})

# aaaとbbbでグループ化し、ccc列の値を結合して新しい列dddを作成
df2 = df.groupby(['aaa', 'bbb'])['ccc'].apply(lambda x: ' '.join(x)).reset_index(name='ddd')

# df2の確認
df2

# 各`id`ごとのコスト合計を計算
cost_sum_per_id = df.groupby('id')['cost'].transform('sum')

# 新しい列`rate`に比率を計算して格納
df['rate'] = df['cost'] / cost_sum_per_id * 100

# 結果を表示
print(df)

 

import pandas as pd

# サンプルデータフレームを作成
data = {
    'id': ['s1', 's2', 's2', 's2'],
    'item': ['z1', 'z2', 'z3', 'z4'],
    'hour': [40, 20, 80, 60],
    'cost': [800000, 800000, 800000, 800000]
}
df = pd.DataFrame(data)

# 各`id`ごとのコスト合計を計算
cost_sum_per_id = df.groupby('id')['cost'].transform('sum')

# 新しい列`rate`に比率を計算して格納
df['rate'] = df['cost'] / cost_sum_per_id * 100

# 結果を表示
df

 

 

from datetime import datetime

# 指定された日時
specified_date = datetime(1904, 1, 10, 23, 30)

# 基準日(1904年1月1日を想定)
base_date = datetime(1904, 1, 1)

# 経過時間(日として)
elapsed_days = (specified_date - base_date).days
# 経過時間(時間として、23:30を加算)
elapsed_hours = elapsed_days * 24 + 23 + 30/60

elapsed_hours