python - 对数据帧进行切片并根据不同切片添加值

标签 python pandas dataframe

我有一个数据框,其中有一列代表阶段(“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/

相关文章:

python - Matplotlib 无法通过 PyCharm 工作

python - Pandas 中的动态过滤/屏蔽

python - 将连续出现的一定数量的数字从上到下均等地替换为某个值

python - 如何用行中的前一个可用值填充 nan 值?

python - 在 Python 中,str 和 int 之间的哪种转换方式更快?

Python:tkinter从类中删除对象并使其不可见

python - Django 表单未显示

python - 在 pandas 中查询时,如何跳过 None 的过滤器?

python - 数据帧到字符串

python - 如何转换 Dataframe Column1 :Column2 (key:value) in Dictionary in Pyspark?