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