我有一个数据框,其中有一列代表阶段(“A”、“B”和“C”)。我需要对数据框进行切片,这样我只有列“A”,将其除以 2 并将值添加到另一列。
这是一个例子:
import pandas as pd
data = {'time': [1,2,1,2,1,2,],
'phase': ['A', 'A', 'B', 'B', 'C', 'C' ],
'value': [2, 3, 4, 5, 6, 7]}
df = pd.DataFrame(data)
print(df)
time phase value
0 1 A 2
1 2 A 3
2 1 B 4
3 2 B 5
4 1 C 6
5 2 C 7
slice_A = df.loc[df['phase']== 'A', 'value'] /2
print(slice_A)
0 1.0
1 1.5
Name: value, dtype: float64
df.loc[df['phase']=='B', 'value'] += slice_A
df
time phase value
0 1 A 2.0
1 2 A 3.0
2 1 B NaN
3 2 B NaN
4 1 C 6.0
5 2 C 7.0
我理解这是因为 slice_A
的索引与以下内容不同:
df.loc[df['phase']=='B', 'value']
我尝试使用切片数据帧的索引重置系列。我还尝试使用数据框而不是系列,但我无法让它工作。但是,我仍然得到 Nan 值。
最佳答案
将您的系列转换为 numpy 数组以避免索引对齐:
df.loc[df['phase']=='B', 'value'] += slice_A.to_numpy()
print(df)
# Output
time phase value
0 1 A 2.0
1 2 A 3.0
2 1 B 5.0
3 2 B 6.5
4 1 C 6.0
5 2 C 7.0
显然它是有效的,因为你的 A 和 B 一样多。你可以添加到 B:
- 像
3
这样的标量值 - 只有一个元素的数组
[3]
- 相同形状的数组(此处为
(2,)
) - 具有相同索引的系列
关于python - 对数据帧进行切片并根据不同切片添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76518462/