我需要使用从数据帧的子集计算出的值来更新 df 子集的数据。
人员NR | XYZ | 日期 | 价值 |
---|---|---|---|
22222 | a | 一月 | 0,8 |
22222 | b | 一月 | 0,2 |
22222 | a | 二月 | 0,8 |
22222 | b | 二月 | 0,2 |
我有一个大约 8000 PERSNR 的数据框,看起来像这样,只是有更多的列
对于我已经知道的子集(我有一个 PERSNR 列表来过滤它),我需要将值添加在一起,忽略 XYZ
我可以用pivot_table做到这一点,并且可以从中得到另一个df。
我遇到的问题是,我需要随后更新原始 DF 中的值。
我的目标是获得以下内容而不丢失我的 DF 的任何其他数据。
人员NR | XYZ | 日期 | 价值 |
---|---|---|---|
22222 | a | 一月 | 1,0 |
22222 | b | 一月 | 0,0 |
在 Excel 中,我会对我的 PERSNR、XYZ 和日期的值列进行求和。
然后我将在“值”列中用 vlookup 替换我的值,并用零覆盖标识符 XYZ“b”的值。这将永远为零。
关于如何做到这一点有什么建议吗?
提前致谢
迈克
假设有这样的数据框:
data = {
"PERSNR": [22222, 22222, 22222, 22222, 55555, 55555],
"XYZ": ["a", "b", "a", "b", "a", "b"],
"DATE": ["Jan", "Jan", "Feb", "Feb", "Jan", "Jan"],
"VALUE": [0.8, 0.2, 0.8, 0.2, 0.8, 0.2],
}
PERSNR XYZ DATE VALUE
0 22222 a Jan 0.8
1 22222 b Jan 0.2
2 22222 a Feb 0.8
3 22222 b Feb 0.2
4 55555 a Jan 0.8
5 55555 b Jan 0.2
合并两个数据框:(i) 原始减号列
VALUE
和 (ii) 在 PERSNR
上分组的数据框(假设有多个值;否则,该列不是必要)和 DATE
,然后将每组中的 VALUE
相加并重置索引。
使用
VALUE
设置列 0
,其中 df["XYZ"] == "b"
。
使用
.loc
仅对选定的 PERSNR
值执行前面的步骤。
selected_persnr = [22222] # add all selected values here
df.loc[df["PERSNR"].isin(selected_persnr)] = pd.merge(
df.drop(columns="VALUE"),
df.groupby(["PERSNR", "DATE"])["VALUE"].sum().reset_index(),
)
df.loc[(df["PERSNR"].isin(selected_persnr)) & (df["XYZ"] == "b"), "VALUE"] = 0
PERSNR XYZ DATE VALUE
0 22222 a Jan 1.0
1 22222 b Jan 0.0
2 22222 a Feb 1.0
3 22222 b Feb 0.0
4 55555 a Jan 0.8
5 55555 b Jan 0.2