繁体   English   中英

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

[英]How can I iterate over column values in Pandas and create a new observation based on the values of multiple columns in the same row?

因此,发布了这个问题的许多变体,但它们都不是我正在寻找的。

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

日期集示例:

+----+----------+-------+-------------+------------------------------------+
| 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 中有更好的方法来做到这一点。 谁能指出我正确的方向?

数据集图片链接:

这里

您可以将布尔值乘以字符串,并且由于 pandas 的 sum() function 连接字符串,您可以获取数据和列值的点积。 两者都做,你可以这样做:

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,如果您的值确实是 True boolean 值,您可以使用np.wheredf.dot

import numpy as np

#to keep the peformance of numpy arrays i would suggest doing
#df.columns = df.columns.map(lambda x : f'{x},')
df['places'] = df.dot(df.columns)


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

或使用 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                     

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM