Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何迭代Pandas中的列值,并基于同一行中多个列的值创建新的观察结果?_Python_Pandas_Data Analysis_Data Manipulation - Fatal编程技术网

Python 如何迭代Pandas中的列值,并基于同一行中多个列的值创建新的观察结果?

Python 如何迭代Pandas中的列值,并基于同一行中多个列的值创建新的观察结果?,python,pandas,data-analysis,data-manipulation,Python,Pandas,Data Analysis,Data Manipulation,所以这个问题有很多变体,但是没有一个是我想要的 我有一个数据集,其中包含多个列,这些列包含布尔值,这些布尔值指示用户是否在其居住地列出了城市名称。用户可以命名多个城市名称。见下文 日期集示例: 我要做的是创建一个新列,该列存储用户列出的所有城市名称的文本名称。我可以用一百万个嵌套if条件来做,但我相信在熊猫身上有更好的方法。谁能给我指出正确的方向吗 数据集图像链接: 您可以将布尔值乘以字符串,由于pandas的sum函数连接字符串,因此可以获取数据和列值的点积。两者兼而有之,您可以做到: df

所以这个问题有很多变体,但是没有一个是我想要的

我有一个数据集,其中包含多个列,这些列包含布尔值,这些布尔值指示用户是否在其居住地列出了城市名称。用户可以命名多个城市名称。见下文

日期集示例: 我要做的是创建一个新列,该列存储用户列出的所有城市名称的文本名称。我可以用一百万个嵌套if条件来做,但我相信在熊猫身上有更好的方法。谁能给我指出正确的方向吗

数据集图像链接:
您可以将布尔值乘以字符串,由于pandas的sum函数连接字符串,因此可以获取数据和列值的点积。两者兼而有之,您可以做到:

df = pd.DataFrame({'NY':[True, True, False],'SF':[True, False, True]})

delimiter = ", "
tmp= df.rename(columns=lambda x: x+delimiter)
df['Cities'] = tmp.dot(tmp.columns).str[:-len(delimiter)]
df


#~        NY     SF  Cities
#~  0   True   True  NY, SF
#~  1   True  False      NY
#~  2  False   True      SF
如果只有部分列是城市名称,则可以列出城市列并仅使用这些列:

cities = ['NY','SF']
tmp= df[cities].rename(columns=lambda x: x+delimiter)

您可以将布尔值乘以字符串,由于pandas的sum函数连接字符串,因此可以获取数据和列值的点积。两者兼而有之,您可以做到:

df = pd.DataFrame({'NY':[True, True, False],'SF':[True, False, True]})

delimiter = ", "
tmp= df.rename(columns=lambda x: x+delimiter)
df['Cities'] = tmp.dot(tmp.columns).str[:-len(delimiter)]
df


#~        NY     SF  Cities
#~  0   True   True  NY, SF
#~  1   True  False      NY
#~  2  False   True      SF
如果只有部分列是城市名称,则可以列出城市列并仅使用这些列:

cities = ['NY','SF']
tmp= df[cities].rename(columns=lambda x: x+delimiter)

IIUC,如果您的值确实是真布尔值,则可以使用np.where或df.dot

或者使用numpy

df['places_2'] = np.where(df, df.columns, '').sum(axis=1)

     New York     LA  New Orleans             places_2
ID                                                    
1.0      True  False         True  New YorkNew Orleans
2.0      True  False        False             New York
3.0     False  False        False                     

IIUC,如果您的值确实是真布尔值,则可以使用np.where或df.dot

或者使用numpy

df['places_2'] = np.where(df, df.columns, '').sum(axis=1)

     New York     LA  New Orleans             places_2
ID                                                    
1.0      True  False         True  New YorkNew Orleans
2.0      True  False        False             New York
3.0     False  False        False                     

用户ID列在哪里?每行都有一个唯一的用户ID值。我编辑了我的示例以反映这一点。当然。新列new Var是我想要得到的输出。用户ID列在哪里?每行都有一个唯一的用户ID值。我编辑了我的示例以反映这一点。当然。新列newvar是我想要得到的输出。