在几种情况下遍历熊猫数据框

时间:2020-05-02 20:35:11

标签: python pandas dataframe

enter image description here

所以我有一个数据框,其中包含不同点,X,Y,Z和其他几个属性的位置。然后,我还有另一个称为path()的约束,其中包含形成轨迹的不同点。这些点包含在数据框中。

出于绘图的原因,我想将path()中的点的“路径”列设置为仅等于2。如何确定数据框的哪些点在此路径中,并更改其“路径”属性?

说明:

路径是这样的:

path = {12, 34, 14}

和pos {}给出路径的每个节点的[x,y,z]

pos = {12: [3, 4, 2], 34: [1, 3, 4], 14: [5, 4, 5]}

其中[3,4,2] = [x,y,z]类似于数据帧中的那些。因此,我要做的是将数据框中与该字段匹配的位置的“路径”列从1更改为2。因此,例如,如果对于14:[5、4、55],数据框中有一行X = 5,Y = 4和Z = 55,则我希望该行的path =2。

这是我尝试过的方法,我认为它应该起作用,但是不起作用。 Basicallt我尝试过滤位置,然后相应地修改数据框。

(这里我尝试从0更改为1,而不是1更改为2,因为我给您的df图像是我在尝试此操作时修改过的图像,但忽略了它)

df['path'] = np.zeros(len(df.index))

filt1 = (df['eventID'] == 98)
df_path = df[filt1]

for node in path:

     A, B, C = pos[node]
     filt2 = (df['X'] == A) & (df['Y'] == B) & (df['Z'] == C)

     df_path[filt2]['path'].replace({0:1})

我也收到此警告:

UserWarning:

Boolean Series key will be reindexed to match DataFrame index.

对不起,如果我“违反”一些皱着眉头的规则,我是新来的。 非常感谢

Àlex

2 个答案:

答案 0 :(得分:0)

已解决!

df['path'] = np.zeros(len(df.index))

filt1 = (df['eventID'] == 98)
df_path = df[filt1]

for node in path:

   A, B, C = pos[node]
   filt2 = (df['X'] == A) & (df['Y'] == B) & (df['Z'] == C)

   df_path['path'].loc[filt2] = 1

答案 1 :(得分:-1)

1。从字典中找到所需的键using this

>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.keys()
>>> # keys and values are iterated over in the same order (insertion order)
>>> list(keys)
['eggs', 'sausage', 'bacon', 'spam']

2。现在要更改,请替换路径属性 using this

df = pd.DataFrame({"column1": ["a", "b", "a"]})
print(df)
OUTPUT
  column1
0       a
1       b
2       a

df["column1"].replace({"a": "x", "b": "y"}, inplace=True)
print(df)
OUTPUT
  column1
0       x
1       y
2       x