因此,这个问题有很多变体,但没有一个正是我正在寻找的。p>
我有一个数据集,其中包含多个包含 bool 值的列,这些 bool 值指示用户是否在其居住地列出了城市名称。用户可以命名多个城市名称。见下文。
数据集示例:
+----+----------+-------+-------------+------------------------------------+
| ID | New York | LA | New Orleans | New Var |
+----+----------+-------+-------------+------------------------------------+
| 1 | True | False | True | 'New York, NY', 'New Orleans, LA' |
| 2 | True | False | False | 'New York, NY |
| 3 | False | False | False | 'None' |
+----+----------+-------+-------------+------------------------------------+
我想要做的是创建一个新列,用于存储用户列出的所有城市名称的文本名称。我可以用一百万个嵌套的 if 条件来做到这一点,但我确信在 Pandas 中有更好的方法来做到这一点。谁能指出我正确的方向?
数据集图像链接:
最佳答案
您可以将 bool 值与字符串相乘,并且由于 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)
关于python - 如何迭代 Pandas 中的列值并根据同一行中多列的值创建新的观察?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62614801/