有没有一种方法可以引用在for循环中结构相同的问题?

2024-09-30 16:21:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在for循环中调用以相同方式构造的子问题列表(例如E1_1、E1_2、E1_3等)。我的目标是将这些子问题中0的所有实例替换为缺失值(无),前提是受访者表示他们应该回答主要问题(例如,如果df['EOPS']等于1,这意味着回答者表示他们正在回答“E”问题,如果他们没有回答主要问题(例如,如果“E1”没有回答,“E1\u 1”、“E1\u 2”、“E1\u 3”等应重新编码为“NaNs”)

代码:

 df = pd.DataFrame([[1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], columns=['EOPS', 'E1', 'E1_1', 'E1_2', 'E1_3', 'E2', 'E2_1', 'E2_2', 'E2_3', 'E3', 'E3_1', 'E3_2', 'E3_3'])

list_of_questions = ['E1', 'E2', 'E3'] # each question in list has associated questions 'E1_1', 'E1_2', 'E1_3', 'E2_1', 'E2_2', 'E2_3', etc.

for question in list_of_questions:
   for i in range(1,3):
      if df['E1'] == 0 & df['EOPS'] == 1:
         df['E1_`i''] = np.where(data_final['E1_`i''] == 0, None, data_final['E1_`i''])

我怎样才能调用这个循环中的子问题?对于那些熟悉Stata的人来说,这可以用`'引号来完成,就像我在i中所做的那样,但是我想知道在Python中是否也可以这样做。你知道吗

我希望实现的是:

 df = pd.DataFrame([[1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, None, None, None, None, None, None, None, None, None, None, None, None]], columns=['EOPS', 'E1', 'E1_1', 'E1_2', 'E1_3', 'E2', 'E2_1', 'E2_2', 'E2_3', 'E3', 'E3_1', 'E3_2', 'E3_3'])

谢谢!你知道吗


Tags: columnsofinnonedataframedfforlist
2条回答

根据你的问题,我不完全确定,但我怀疑zip就是你想要的:

a = [1,2,3]
b = ["a", "b", "c"]
for x, y in zip(a, b):
    print(x, y)

将提供:

1 a
2 b
3 c

另一种方法在没有zip的情况下给出相同的结果(您应该使用zip,但是迭代器通常更好):

a = [1,2,3]
b = ["a", "b", "c"]
for i, x in enumerate(a):
    print(x, b[i])

不需要循环,我们可以利用.any.loc来指定您的列

例如

import numpy as np    
cols = df.iloc[:,1:].columns.tolist()

df.loc[((df[cols] == 0).all(axis=1)) & (df['EOPS'] == 1), cols] = np.nan

另一种选择列的方法:

cols = df.filter(regex='E\d+').columns

结果:

   EOPS   E1  E1_1  E1_2  E1_3   E2  E2_1  E2_2  E2_3   E3  E3_1  E3_2  E3_3
0     1  1.0   0.0   1.0   1.0  1.0   0.0   1.0   1.0  1.0   0.0   1.0   1.0
1     0  0.0   0.0   0.0   0.0  0.0   0.0   0.0   0.0  0.0   0.0   0.0   0.0
2     1  NaN   NaN   NaN   NaN  NaN   NaN   NaN   NaN  NaN   NaN   NaN   NaN

相关问题 更多 >