python - 如何迭代 Pandas 中的列值并根据同一行中多列的值创建新的观察?

标签 python pandas data-analysis data-manipulation

因此,这个问题有很多变体,但没有一个正是我正在寻找的。

我有一个数据集,其中包含多个包含 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 中有更好的方法来做到这一点。谁能指出我正确的方向?

数据集图像链接:

HERE

最佳答案

您可以将 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/

相关文章:

python - 如何将多个数据集合并为一个数据集?

python - 在 Python 中通过 IDL 定义函数

python - python 线性回归 - 梯度下降误差

python - 操作 JSON 类型文件的有效方法

R - 边缘没有重复值的相关矩阵

coordinates - Power BI - 根据纬度/经度查找最近的位置

Python+matplotlib : custom linestyles

python - 如何获得有关 Python 方法的帮助?

python - 将带有空格分隔符的文本文件导入python中的csv

python-3.x - 如何使用 Pandas 按降序和时间按升序对日期进行排序